هذا هو الأمر sim_java الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة على الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
sim - ابحث عن أوجه التشابه في ملفات C أو Java أو Pascal أو Modula-2 أو Lisp أو Miranda أو النصية
موجز
سيم_ ج [ - [defFiMnpPRsSTv] -r N -t N -w N -o F ] ملف ... [ [ / | ] ملف ... ]
سيم_ ج
سيم_جافا
سيم_باسك
sim_m2
sim_lisp
sim_mira
sim_text
الوصف
سيم_ ج يقرأ ملفات C. ملف ويبحث عن أجزاء النص المتشابهة ؛ اثنين
تتشابه أجزاء نص البرنامج إذا كانت تختلف فقط في التخطيط والتعليق والمعرفات ،
ومحتويات الأرقام والسلاسل والأحرف. إذا كان أي أشواط بطول كاف
وجدت ، تم الإبلاغ عنها على الإخراج القياسي ؛ عدد الرموز المميزة في المدى
بين قوسين مربعين.
سيم_جافا يفعل الشيء نفسه لجافا ، سيم_باسك لباسكال ، sim_m2 لـ Modula-2 ، sim_mira For
ميراندا و sim_lisp من أجل Lisp. Sim_text يعمل على نص تعسفي وهو في بعض الأحيان
مفيد في البرامج النصية للصدفة.
يمكن استخدام البرنامج للعثور على أجزاء منسوخة من التعليمات البرمجية غير ذات صلة
برامج (مع -s or -S) ، أو للعثور على رمز مكرر بطريق الخطأ في المشاريع الكبيرة
(مع -f or -F).
إذا كان الفاصل / or | موجود في قائمة ملفات الإدخال ، والملفات مقسمة إلى ملف
مجموعة من الملفات "الجديدة" (قبل ملف / or |) ومجموعة من الملفات "القديمة" ؛ إذا لم يكن هناك / or
|، كل الملفات "جديدة". لا يتم مقارنة الملفات القديمة مع بعضها البعض. انظر أيضا
الوصف ل -s -S الخيارات أدناه.
نظرًا لأن اختبار التشابه يحتاج إلى أسماء ملفات لتحديد أوجه التشابه ، فلا يمكنه القراءة
من المدخلات القياسية.
هناك الخيارات التالية:
-d الإخراج في ملف فرق(1) -مثل التنسيق بدلاً من التنسيق الافتراضي المكون من عمودين.
-e تتم مقارنة كل ملف بكل ملف على حدة ؛ سيجد هذا كل أوجه التشابه
بين جميع النصوص المعنية ، بغض النظر عن النص المكرر (انظر الحساب
النسب المئوية أدناه).
-f عمليات التشغيل مقصورة على المقاطع ذات الأقواس المتوازنة ، لعزل الإمكانات
أجساد روتينية (ليست في sim_text).
-F يجب أن تتطابق أسماء الإجراءات في المكالمات تمامًا (وليس في sim_text).
-i تتم قراءة أسماء الملفات المراد مقارنتها من الإدخال القياسي ، بما في ذلك ملف
فاصل ممكن / or |؛ يجب أن تكون أسماء الملفات من سطر واحد. هذا الخيار
يسمح بتحديد عدد كبير جدًا من أسماء الملفات ؛ إنه يختلف عن @
التسهيلات التي يوفرها بعض المترجمين من حيث أنه يتعامل مع أسماء الملفات فقط ، ويقوم بذلك
عدم التعرف على حجج الخيار.
-M يتم عرض معلومات استخدام الذاكرة على إخراج الخطأ القياسي.
-n يتم تلخيص أوجه التشابه التي تم العثور عليها من خلال اسم الملف وموضعه وحجمه بدلاً من
معروضة بالكامل.
-o F الإخراج مكتوب على الملف المسمى F.
-p يتم إعطاء الناتج بنسب التشابه ؛ انظر "حساب النسب المئوية" أدناه ؛
يدل -e -s.
-P As -p ولكن يظهر المساهم الرئيسي فقط ؛ يدل -e -s.
-r N تم تعيين الحد الأدنى لطول التشغيل على N الوحدات. الافتراضي هو 24 رمزًا ، ما عدا في
sim_textحيث تكون 8 كلمات.
-R يتم إدخال الدلائل في قائمة الإدخال بشكل متكرر ، وجميع الملفات التي تحتوي عليها
تشارك في المقارنة.
-s لا تتم مقارنة محتويات الملف بنفسه (- تعني "ليس ذاتي").
-S تتم مقارنة محتويات الملفات الجديدة بالملفات القديمة فقط - وليس بين
أنفسهم.
-t N بالاشتراك مع -p or -P الخيارات ، يحدد الحد الأدنى (بالنسبة المئوية) أدناه
ما هي أوجه التشابه التي لن يتم الإبلاغ عنها ؛ الافتراضي هو 1 ، باستثناء في sim_text,
حيث هو 20.
-T يتم إنتاج شكل أكثر إيجازًا وتوحيدًا للإخراج ، والذي قد يكون أكثر ملاءمة له
المعالجة البعدية.
-v يطبع رقم الإصدار وتاريخ التجميع على الإخراج القياسي ، ثم يتوقف.
-w N تم ضبط عرض الصفحة المستخدم على N أعمدة. الافتراضي هو 80.
-- (خيار سري يطبع الإدخال كما يراه مدقق التشابه ، و
ثم توقف.)
تشير -p ينتج عن الخيار سطور النموذج
تتكون F من x٪ من مادة G.
مما يعني أنه يمكن أيضًا العثور على x٪ من نص F في G. لاحظ أن هذه العلاقة ليست كذلك
متماثل؛ من الممكن جدًا في الواقع أن يتكون ملف واحد من 100٪ من النص من
ملف آخر ، بينما يتكون الملف الآخر من 1٪ فقط من نص الملف الأول ، إذا
أطوالهم تختلف بما فيه الكفاية. ال -P يظهر الخيار (رأس المال P) المساهم الرئيسي لـ
كل ملف فقط. هذا يبسط تحديد مجموعة من الملفات A [1] ... A [n] ، أين
تسلسل هذه الملفات موجود أيضًا. يمكن تعيين عتبة باستخدام -t
اختيار؛ لاحظ أن مستوى دقة النص الذي تم التعرف عليه لا يزال محكومًا بامتداد -r
الخيار أو الافتراضي.
تشير -r يتحكم الخيار في عدد "الوحدات" التي تشكل المدى. بالنسبة للبرامج التي
قارن كود لغة البرمجة ، الوحدة هي رمز معجمي في اللغة ذات الصلة ؛
التعليق والمواد التمهيدية القياسية (تضمين الملف ، إلخ) يتم تجاهلها وجميع السلاسل
تعتبر نفسها. ل sim_text الوحدة هي "كلمة" يتم تعريفها على أنها أي تسلسل
من حرف واحد أو أكثر أو رقم أو حرف يزيد عن 127 (177 ثمانيًا) ، (لاستيعاب
أحرف مثل ä و ø وما إلى ذلك).
Sim_text يقبل النص المتباعد كنص عادي.
تشير -s -S الخيارات تتحكم في الملفات المراد مقارنتها. يتم تقسيم ملفات الإدخال إلى قسمين
مجموعات جديدة وقديمة. في حالة عدم وجود خيارات التحكم هذه ، تقوم البرامج بمقارنة ملفات
وبالتالي (لأربعة ملفات جديدة و 4 ملفات قديمة):
جديد / قديم <- الملف الأول
1 2 3 4/5 6 7 8 9 10
| ------------ / ------------
ن 1 | ج /
هـ 2 | نسخة /
ث 3 | ccc /
4 | cccc /
ثانيا / / / / / / / / / / / / /
ملف -> 5 | cccc /
س 6 | cccc /
ل 7 | cccc /
د 8 | cccc /
9 | cccc /
10 | cccc /
حيث تمثل cs مقارنات الملفات ، و / الترسيم بين القديم والجديد
الملفات.
باستخدام -s الخيار يقلل هذا إلى:
جديد / قديم <- الملف الأول
1 2 3 4/5 6 7 8 9 10
| ------------ / ------------
ن 1 | /
هـ 2 | ج /
ث 3 | نسخة /
4 | ccc /
ثانيا / / / / / / / / / / / / /
ملف -> 5 | cccc /
س 6 | cccc /
ل 7 | cccc /
د 8 | cccc /
9 | cccc /
10 | cccc /
تشير -S يقلل الخيار من هذا إلى أبعد من:
جديد / قديم <- الملف الأول
1 2 3 4/5 6 7 8 9 10
| ------------ / ------------
ن 1 | /
هـ 2 | /
ث 3 | /
4 | /
ثانيا / / / / / / / / / / / / /
ملف -> 5 | cccc /
س 6 | cccc /
ل 7 | cccc /
د 8 | cccc /
9 | cccc /
10 | cccc /
يمكن للبرامج معالجة أسماء ملفات UNICODE تحت Windows. هذا ذو صلة فقط في إطار
-R الخيار ، حيث لا توجد طريقة لإعطاء أسماء ملفات UNICODE من سطر الأوامر.
القيود
الإدخال المتكرر هو لعنة فحص التشابه. إذا كان لدينا ملف يحتوي على 4
نسخ من نص متطابق ،
A1 A2 A3 A4
حيث تستخدم الأرقام فقط لتمييز النسخ المتطابقة ، هناك 8 هويات:
A1 = A2 و A1 = A3 و A1 = A4 و A2 = A3 و A2 = A4 و A3 = A4 و A1A2 = A3A4 و A1A2A3 = A2A3A4. من بين هؤلاء ، 3 فقط
ذات مغزى: A1 = A2 ، A2 = A3 ، و A3 = A4. وللجدول الذي يحتوي على 20 سطرًا متطابقًا مع كل سطر
أخرى ، ليست غريبة في البرنامج ، هناك 715 هوية ، منها 19 هوية على الأكثر
ذو معنى. من الواضح أن الإبلاغ عن جميع الـ 715 منهم أمر غير مقبول.
ولمعالجة ذلك ، يتم إجراء البحث عن الهويات على النحو التالي: لكل موقع في
النص ، تم العثور على أكبر جزء ، والذي توجد نسخة غير متداخلة منه في النص
بعد ذلك. يتم الإبلاغ عن هذا المقطع ونسخته ويستأنف المسح في الموضع
فقط بعد الجزء. بالنسبة للمثال أعلاه ، ينتج عن هذا الهويات A1A2 = A3A4
و A3 = A4 ، وهو أمر مرضٍ تمامًا ، ول N مقاطع متطابقة تقريبًا 2 سجل N
يتم إعطاء الرسائل.
يعمل هذا أيضًا بشكل جيد عندما تكون المقاطع الأربعة المتطابقة في ملفات مختلفة:
ملف 1: A1
ملف 2: A2
ملف 3: A3
ملف 4: A4
الآن لا تحدث المقاطع المدمجة مثل A1A2 ، وتجد الخوارزمية عمليات التشغيل A1 = A2 ،
A2 = A3 ، و A3 = A4 ، ليصبح المجموع N-1 يعمل بالمعلومات.
حساب النسب المئوية
الأسلوب أعلاه غير مناسب للحصول على النسبة المئوية لمحتوى الملف الذي
يمكن العثور عليها في ملف آخر. يتطلب هذا مقارنة كل زوج من الملفات على حدة
ممثلة ب ac في المصفوفات أعلاه ؛ هذا ما ال -e الخيار لا. تحت -e
الخيار a الجزء File1: A1 ، المعترف به في File2 ، سيتم التعرف عليه مرة أخرى في File3 و
ملف 4. في المثال أعلاه ينتج الأشواط
ملف 1: A1 = ملف 2: A2
ملف 1: A1 = ملف 3: A3
ملف 1: A1 = ملف 4: A4
ملف 2: A2 = ملف 3: A3
ملف 2: A2 = ملف 4: A4
ملف 3: A3 = ملف 4: A4
ليصبح المجموع ½N (N-1) أشواط.
الوقت لأي لبس SPACE المتطلبات
تم الحرص على الحفاظ على متطلبات الوقت لجميع العمليات الداخلية (تقريبًا)
خطي في أطوال ملفات الإدخال ، وذلك باستخدام جداول مختلفة. ومع ذلك ، إذا كان هناك
لا توجد ذاكرة كافية للجداول ، يتم التخلص منها بترتيب غير مهم ، تحتها
الشروط تعود الخوارزميات إلى طبيعتها التربيعية.
متطلبات الوقت تربيعية في عدد الملفات. هذا يعني ، على سبيل المثال ،
يقوم ملف واحد بسعة 64 ميجابايت بمعالجة أسرع بكثير من ملفات 8000 8 كيلو بايت.
يتطلب البرنامج 6 بايت من الذاكرة لكل رمز مميز في الإدخال ؛ 2 بايت لكل سطر جديد
(ليس عند عمل النسب المئوية) ؛ تم العثور على حوالي 76 بايت لكل شوط.
أمثلة
الاتصال
sim_c * .c
يبرز رمز مكرر في الدليل. (من المفيد إزالة الملفات التي تم إنشاؤها
أولا.) مكالمة
sim_c -f -F * .c
يمكن تحديدها بشكل أكبر.
مكالمة
sim_text -e -p -s جديد / * / قديم / *
يقارن كل ملف جديد / * بكل ملف جديد / * وقديم / * ، وإذا كان أي زوج به أكثر من ذلك
20٪ من القواسم المشتركة ، تم الإبلاغ عن هذه الحقيقة. عادة ما يكون التشابه بنسبة 30٪ أو أكثر مهمًا ؛
ربما يكون أقل من 20٪ مصادفة ؛ وبينهما أمر مشكوك فيه.
مكالمة
sim_text -e -n -s -r100 جديد / * "|" قديم/*
يقارن نفس الملفات ، ويبلغ عن شرائح مشتركة كبيرة. (ال | يمكن استخدامها ك
فاصل بدلا من / على الأنظمة حيث / كمعامل سطر أوامر يتم تشويهه بواسطة
مترجم الأوامر.)
كلا النهجين جيدان لاكتشاف الانتحال.
استخدم sim_java عبر الإنترنت باستخدام خدمات onworks.net