यदि लेख या पोस्ट डुप्लिकेट हैं, तो मैं पता लगाने के लिए किस एल्गोरिदम का उपयोग कर सकता हूं?


17

मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या कोई लेख या मंच पोस्ट डेटाबेस के भीतर एक डुप्लिकेट प्रविष्टि है। मैंने इसे कुछ सोचा है, इस निष्कर्ष पर पहुंच रहा हूं कि कोई व्यक्ति जो डुप्लिकेट सामग्री है वह तीन में से एक का उपयोग करके ऐसा करेगा (पता लगाने के लिए अवरोही में मुश्किल है):

  1. सरल प्रतिलिपि पूरे पाठ को चिपकाएँ
  2. पाठ के हिस्सों को कॉपी और पेस्ट करें और इसे अपने स्वयं के साथ मर्ज करें
  3. एक बाहरी साइट से एक लेख की प्रतिलिपि बनाएँ और अपने स्वयं के रूप में बहाना करें

विश्लेषण के लिए तैयारी पाठ

मूल रूप से किसी भी विसंगतियों; लक्ष्य पाठ को यथासंभव "शुद्ध" बनाना है। अधिक सटीक परिणामों के लिए, पाठ "मानकीकृत" द्वारा है:

  1. डुप्लिकेट सफेद रिक्त स्थान स्ट्रिपिंग और प्रमुख और अनुगामी ट्रिमिंग।
  2. न्यूलाइन्स को \ n में मानकीकृत किया जाता है।
  3. HTML टैग हटा दिए जाते हैं।
  4. डारिंग फायरबॉल यूआरएल नामक एक RegEx का उपयोग करके छीन लिया जाता है।
  5. मैं अपने एप्लिकेशन में BB कोड का उपयोग करता हूं ताकि वह जाए।
  6. (ä) ccented और विदेशी (Enlgish के अलावा) अपने गैर विदेशी रूप में परिवर्तित हो जाते हैं।

मैं प्रत्येक लेख के बारे में (1) सांख्यिकी तालिका और (2) कीवर्ड तालिका में जानकारी संग्रहीत करता हूं।

(1) सांख्यिकी तालिका निम्नलिखित आँकड़े पाठ्य सामग्री (इस पोस्ट की तरह) के बारे में संग्रहीत हैं

  1. पाठ की लंबाई
  2. पत्र की गिनती
  3. शब्द गणना
  4. वाक्य गिनती
  5. प्रति वाक्य औसत शब्द
  6. स्वचालित पठनीयता सूचकांक
  7. कोहरे का स्कोर

यूरोपीय भाषाओं के लिए कोलमैन-लियाउ और स्वचालित पठनीयता सूचकांक का उपयोग किया जाना चाहिए क्योंकि वे शब्दांश गिनती का उपयोग नहीं करते हैं, इसलिए एक उचित सटीक स्कोर का उत्पादन करना चाहिए।

(२) खोजशब्द तालिका

कीवर्ड शब्द (सामान्य शब्द) की एक विशाल सूची को छोड़कर उत्पन्न होते हैं, उदाहरण के लिए, 'the', 'a', 'of', 'to', 'etc' आदि।

नमूना डेटा

  • text_length, 3963
  • letter_count, 3052
  • word_count, 684
  • pun_count, 33
  • word_per_sentence, 21
  • गन_फॉग, 11.5
  • auto_read_index, 9.9
  • कीवर्ड 1, मारा गया
  • कीवर्ड 2, अधिकारी
  • कीवर्ड 3, पुलिस

यह ध्यान दिया जाना चाहिए कि एक बार एक लेख को अपडेट करने के बाद उपरोक्त सभी आंकड़े पुन: प्राप्त हो जाते हैं और पूरी तरह से अलग मूल्य हो सकते हैं।

मैं उपरोक्त जानकारी का उपयोग यह पता लगाने के लिए कैसे कर सकता हूं कि क्या कोई लेख जो पहली बार प्रकाशित हो रहा है, पहले से ही डेटाबेस में मौजूद है?


मुझे पता है कि मैं कुछ भी डिजाइन करूंगा वह सही नहीं होगा, सबसे बड़ा जोखिम (1) सामग्री जो डुप्लिकेट नहीं है उसे डुप्लिकेट के रूप में चिह्नित किया जाएगा (सिस्टम) डुप्लिकेट सामग्री के माध्यम से अनुमति देता है।

इसलिए एल्गोरिथ्म को 0 से कोई जोखिम नहीं होने का जोखिम मूल्यांकन संख्या उत्पन्न करना चाहिए 5 संभावित डुप्लिकेट होना और 10 का डुप्लिकेट होना। 5 से ऊपर कुछ भी हो, तो एक अच्छी संभावना है कि सामग्री डुप्लिकेट है। इस मामले में सामग्री को ध्वजांकित किया जा सकता है और इसे लेख से जोड़ा जा सकता है जो कि संभव डुप्लिकेट हैं और एक मानव यह तय कर सकता है कि हटाएं या अनुमति दें।

जैसा कि मैंने कहा कि इससे पहले कि मैं पूरे लेख के लिए कीवर्ड संग्रहीत कर रहा हूं, हालांकि मुझे आश्चर्य है कि क्या मैं पैराग्राफ के आधार पर ऐसा कर सकता हूं; इसका मतलब डीबी में मेरे डेटा को अलग करना भी होगा लेकिन इससे मुझे अपने शुरुआती पद का पता लगाने में भी आसानी होगी।

मैं आँकड़ों के बीच औसत भारित सोच रहा हूँ, लेकिन किस क्रम में और क्या परिणाम होगा ...


यदि यह एक सटीक मिलान है तो आप किसी क्षेत्र को विशिष्ट पर सेट कर सकते हैं। यदि नहीं, तो आपको यह तय करने की आवश्यकता होगी कि पाठ को किस बिंदु पर कॉपी या बारीकी से प्राप्त कार्य माना जा सकता है।
जेम्स पी।

2
कई दिशाएं हैं जिनमें इस तरह का विश्लेषण जा सकता है। इस तरह के विषय पर लोग पूरी किताबें लिखते हैं। यदि आपका लक्ष्य "सापेक्ष निकटता" निर्धारित करना है, तो आपके पास वास्तव में बहुत कम विकल्प हैं, लेकिन जिसे प्राकृतिक भाषा प्रसंस्करण और मशीन लर्निंग कहा जाता है, में खुदाई करना है । यही कंप्यूटर वैज्ञानिक इसे कहते हैं, लेकिन यह वास्तव में सिर्फ सांख्यिकीय विश्लेषण है। एक अच्छा प्रारंभिक बिंदु लेवेन्सहाइट दूरियों को देख सकता है, लेकिन शब्द / वाक्य गणना जैसे "गूंगा" आंकड़े आपके लिए बहुत कम करने की संभावना है।
rdlowrey

1
इसके अलावा, एसओ से माइग्रेट होने से पहले यह टैग किया गया था [php], इसलिए आप php के मूल लेवेंसाइटिन फंक्शन की जाँच कर सकते हैं
rdlowrey

मानव जांच की संभावना के लिए महान विचार डुप्लिकेट! आप स्वचालित रूप से यह तय करने में सक्षम हो सकते हैं कि> 7 एक डुप्लिकेट है और <6 अलग है और केवल मनुष्य के पास 6 या 7. के स्कोर की जांच है। मुझे पता है कि स्पैम की पहचान के साथ एक मशीन नहीं है-पता-और-मानव- पता नहीं-या तो श्रेणी; पास के डुप्लिकेट और एक मूल काम के बीच एक ग्रे क्षेत्र जहां आप सबसे अच्छा कर सकते हैं वह कुछ हद तक मनमाना निर्णय कॉल कर सकता है।
ग्लेनपेटर्सन

@rdlowrey - Levenshtein एल्गोरिदम वे हैं जो मैंने उसी परियोजना में उपयोग किए थे जो मैंने C # में किया था। मैं सहमत हूं, यह शुरू करने के लिए एक अच्छी जगह है और पर्याप्त हो सकती है।
jfrankcarr

जवाबों:


4

रहे हैं कई एल्गोरिदम कि NLP में दस्तावेज़ समानता के साथ सौदा। यहाँ विभिन्न एल्गोरिदम का वर्णन करने वाला एक सेमिनल पेपर है। इसके अलावा विकिपीडिया का एक बड़ा संग्रह है। मैं जारो विंकलर उपाय का पक्ष लेता हूं और इसका उपयोग उन्होंने एग्लोमेरेटिव क्लस्टरिंग विधियों में ग्रेड स्कूल परियोजनाओं के लिए किया है।


6

राबिन-कार्प एल्ग्रिथिथम पर एक नज़र डालें । यह एक रोलिंग हैश का उपयोग करता है जैसे rsync का उपयोग सिंक के दौरान प्रेषित बाइट्स को कम करने के लिए करता है। हैश के लिए आपके द्वारा उपयोग की जाने वाली खिड़की के आकार को समायोजित करके आप इसे कम या ज्यादा संवेदनशील बना सकते हैं। आरके का उपयोग अन्य चीजों के अलावा, साहित्यिक चोरी का पता लगाने के लिए किया जाता है, जो मूल रूप से छंटनी की तलाश में है।


4
ओपी द्वारा बताई गई समस्या बिल्कुल साहित्यिक चोरी का पता लगाने जैसी लगती है , और मैं सुझाव दूंगा कि मदद के लिए पहली जगह के रूप में। (बस अपने स्रोतों की पहचान करना सुनिश्चित करें!)
कालेब

4

इस पर पहली बार वाक्यों का पता लगाने (या डेटा के कुछ अन्य उचित ब्लॉक) हो सकते हैं। उन ब्लॉकों को लें और किसी भी मेटा डेटा, HTML यादृच्छिक सफेद स्थान, रिटर्न आदि को छीन लें। परिणाम का MD5 लें और इसे किसी तालिका में संग्रहीत करें। फिर इन ब्लॉकों के खिलाफ मैच खोजने की कोशिश करें।

यदि यह काम नहीं करता है तो आप n- ग्राम की कोशिश कर सकते हैं। यहां आपको पृष्ठ पर प्रत्येक शब्द की एक प्रविष्टि की आवश्यकता है, लेकिन यह आपको बहुत अच्छे मैच देने में सक्षम होना चाहिए।

http://en.wikipedia.org/wiki/N-gram


विशेष रूप से html जैसे अर्ध-संरचित डेटा के लिए n-ग्राम आधारित उपाय md5 हैश से बहुत बेहतर हैं।
कैंडीड ऑक्ट

1

एक सटीक गणितीय गणित के लिए मैं एक हैश स्टोर करूँगा और फिर उसकी तुलना करूँगा।

मुझे लगता है कि परीक्षा के लिए उपयोग की जाने वाली प्रणालियाँ शब्दों के समूहों और फिर प्रत्येक आकार के समूहों की आवृत्ति को मापती हैं। उदाहरण के लिए, 30 शब्दों की एक श्रृंखला जो कॉपी की जाती है, उसमें 5 जोखिम अंक होंगे और 10 शब्द श्रृंखलाओं की 5 घटनाओं में स्कोर 5 अंक होंगे। तब आपके पास प्रति 500 ​​शब्दों पर 30 अंकों की एक थ्रोट पकड़ होगी।

वास्तव में आपको एक सिमेंटिक एल्गोरिथ्म की आवश्यकता है ताकि 'और' और 'जैसे शब्द भी समान हों।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.