التحقق من تكرارات المستندات وثائق مماثلة في تطبيق إدارة المستندات

StackOverflow https://stackoverflow.com/questions/1728977

سؤال

تحديث: لقد كتبت الآن امتداد PHP يسمى php_ssdeep. بالنسبة ل API SSDEEP C لتسهيل مقارنات التجزئة والتجزئة في PHP أصلا. مزيد من المعلومات يمكن العثور عليها انتهى في مدونتي. وبعد آمل أن يكون هذا مفيدا للناس.

أنا متورط في كتابة تطبيق إدارة المستندات المخصصة في PHP على مربع Linux الذي سيخزن تنسيقات الملفات المختلفة (يحتمل أن يتم تحميل 1000 من الملفات) وسنكون قادرين على التحقق مما إذا تم تحميل مستند نصي من قبل لمنع الازدواجية في قاعدة البيانات وبعد

بشكل أساسي عندما يقوم المستخدم بتحميل ملف جديد، نود أن نكون قادرين على تقديم قائمة من الملفات إما تكرار أو تحتوي على محتوى مماثل. من شأنه أن يسمح لهم بذلك باختيار أحد المستندات الموجودة مسبقا أو الاستمرار في تحميل خاصة بهم.

سيتم تحديد مستندات مماثلة من خلال النظر من خلال محتواهم للإرسال المماثلة وربما قائمة موالدة ديناميكيا بالكلمات الرئيسية. يمكننا بعد ذلك عرض نسبة مئوية مع المستخدم لمساعدتهم في العثور على التكرارات.

هل يمكنك أن توصي بأي حزم لهذه العملية وأي أفكار حول كيفية القيام بذلك في الماضي؟

المكرر المباشر أعتقد أنه يمكن القيام به من خلال الحصول على جميع محتوى النص و

  • تجريد whitespace.
  • إزالة علامات الترقيم
  • تحويل إلى حالة أقل أو أعلى

ثم تشكل تجزئة MD5 للمقارنة مع أي مستندات جديدة. يجب أن تساعد هذه العناصر في منع الوقاية من عدم العثور على Dupes إذا قام المستخدم بتحرير مستند لإضافة فواصل فقرة إضافية على سبيل المثال. أي أفكار؟

يمكن أن تعمل هذه العملية أيضا كعمل ليلي ويمكننا أن نعلم المستخدم بأي تكرار عند تسجيل الدخول التالي إذا كان الشرط الحسابي رائع جدا في الوقت الفعلي. في الوقت الحقيقي سيكون المفضل.

هل كانت مفيدة؟

المحلول

تحديث: لقد كتبت الآن امتداد PHP يسمى php_ssdeep. بالنسبة ل API SSDEEP C لتسهيل مقارنات التجزئة والتجزئة في PHP أصلا. مزيد من المعلومات يمكن العثور عليها انتهى في مدونتي. وبعد آمل أن يكون هذا مفيدا للناس.

لقد وجدت برنامجا يفعل ما يدعو منشئه وجيسي كورنبلوم، "غامض التجزئة". في الأساس للغاية، يجعل التجزئة للملف الذي يمكن استخدامه للكشف عن ملفات مماثلة أو مطابقات متطابقة.

النظرية وراءها موثقة هنا: تحديد الملفات المتطابقة تقريبا باستخدام السياق الناجم عن التجزئة المجانية

ssdeep. هو اسم البرنامج ويمكن تشغيله على Windows أو Linux. كان مخصصا للاستخدام في الحوسبة الطب الشرعي، ولكن يبدو مناسبا بما فيه الكفاية لأغراضنا. لقد قمت بإجراء اختبار قصير على جهاز Pentium 4 القديم ويستغرق الأمر حوالي 3 ثوان للذهاب من خلال ملف تجزئة من 23 ميغابايت (التجزئة مقابل أقل من 135000 ملف فقط) تبحث عن التطابقات مقابل ملفين. يتضمن ذلك الوقت إنشاء التجزئة للملفتين الذي كنت أبحث عنه أيضا.

نصائح أخرى

أنا أعمل في مشكلة مماثلة في Web2project وبعد السؤال والحفر، جئت إلى استنتاج "المستخدم لا يهتم". وجود مستندات مكررة لا يهم المستخدم طالما أنهم يمكنهم العثور على مستندهم الخاص باسمه الخاص.

يقال إن هذا النهج الذي أتخذه:

  • اسمح للمستخدم بتحميل مستند يشارك فيه بأي مشاريع / مهام يريدها؛
  • يجب إعادة تسمية الملف لمنع حصوله على شخص ما عبر HTTP .. أو تخزين أفضل خارج جذر الويب. سيظل المستخدم يرى اسم ملفهم في النظام وإذا قاموا بتنزيله، يمكنك ضبط الرؤوس باستخدام اسم الملف "المناسب"؛
  • في مرحلة ما في المستقبل، أعالج الوثيقة لمعرفة ما إذا كانت هناك مكررة .. في هذه المرحلة، نحن ليس تعديل المستند. بعد كل شيء، يمكن أن يكون هناك أسباب مهمة يتم تغيير المسافة البيضاء أو الرسملة؛
  • إذا كانت هناك Dupes، حذف الملف الجديد ثم ارتباطه بالقديم القديم؛
  • إذا لم يكن هناك dupes، لا تفعل شيئا؛
  • فهرس ملف بحث مصطلحات - اعتمادا على تنسيق الملف، هناك الكثير من الخيارات، حتى بالنسبة لمستندات Word؛

في جميع أنحاء كل هذا، لا نقول للمستخدم كان مكررا ... لا يهتمون. انها الولايات المتحدة (المطورين، DB يديرينس، إلخ) تلك الرعاية.

ونعم، هذا يعمل حتى إذا قاموا بتحميل إصدار جديد من الملف لاحقا. أولا، يمكنك حذف الإشارة إلى الملف، ثم - تماما مثل مجموعة القمامة - يمكنك فقط حذف الملف القديم فقط إذا كانت هناك مراجع صفرية إليها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top