Jaro-Winkler और Levenshtein की दूरी के बीच अंतर? [बन्द है]


83

मेरे पास एक उपयोग का मामला है जहां मुझे कई फाइलों से लाखों रिकॉर्ड के फजी मिलान करने की आवश्यकता है। मैंने इसके लिए दो एल्गोरिदम की पहचान की: यारो-विंकलर और लेवेन्सहाइट ने दूरी को संपादित किया।

जब मैंने दोनों की खोज शुरू की, तो मुझे समझ में नहीं आ रहा था कि दोनों के बीच सही अंतर क्या है। ऐसा लगता है कि लेवेनशेटिन दो तारों के बीच संपादन की संख्या देता है, और जरो-विंकलर 0.0 से 1.0 के बीच एक सामान्यीकृत स्कोर प्रदान करता है। मुझे एल्गोरिथ्म समझ में नहीं आया।

जैसा कि मुझे या तो एल्गोरिथ्म का उपयोग करने की आवश्यकता है, मुझे यह जानना होगा कि इस दो एल्गोरिदम के बीच मूलभूत अंतर क्या हैं।

दूसरे, मैं इस दो एल्गोरिदम के बीच प्रदर्शन अंतर के बारे में जानना चाहूंगा।

जवाबों:


174

लेवेंशेटिन एक स्ट्रिंग को दूसरे में बदलने के लिए आवश्यक संपादन (सम्मिलन, विलोपन, या प्रतिस्थापन) की संख्या को गिनता है। डैमेरू-लेवेन्शिन एक संशोधित संस्करण है जो ट्रांसपोज़िशन को एकल संपादन भी मानता है। हालाँकि आउटपुट एडिटर्स की पूर्णांक संख्या है, लेकिन इसे सूत्र द्वारा समानता मूल्य देने के लिए सामान्यीकृत किया जा सकता है

1 - (edit distance / length of the larger of the two strings)

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

निर्णय लेना कि कौन सा उपयोग करना है, यह केवल प्रदर्शन का विषय नहीं है। ऐसी विधि चुनना महत्वपूर्ण है जो आपके द्वारा तुलना किए जा रहे तार की प्रकृति के अनुकूल हो। सामान्य तौर पर, आपके द्वारा उल्लिखित दोनों एल्गोरिदम महंगे हो सकते हैं, क्योंकि प्रत्येक स्ट्रिंग की तुलना हर दूसरे स्ट्रिंग से की जानी चाहिए, और आपके डेटा सेट में लाखों स्ट्रिंग्स के साथ, यह तुलनाओं की जबरदस्त संख्या है। यह प्रत्येक स्ट्रिंग के लिए ध्वन्यात्मक एन्कोडिंग की गणना करने जैसी किसी चीज़ की तुलना में बहुत अधिक महंगा है, और फिर समान एन्कोडिंग साझा करने वाले तारों को समूहीकृत करता है।

इन एल्गोरिदम और इंटरनेट पर अन्य फजी स्ट्रिंग मिलान एल्गोरिदम पर विस्तृत जानकारी का खजाना है। यह आपको एक शुरुआत देगा:

व्यक्तिगत नाम मिलान की तुलना: तकनीक और व्यावहारिक मुद्दे

उस कागज के अनुसार, मैंने जो चार जरो और लेवेन्शिन एल्गोरिदम का उल्लेख किया है उनकी गति सबसे तेज से सबसे धीमी है:

  • Jaro
  • Jaro-विंकलर
  • Levenshtein
  • Damerau-Levenshtein

सबसे धीमी गति से 2 से 3 बार सबसे धीमी गति से। बेशक ये समय स्ट्रिंग्स और कार्यान्वयन की लंबाई पर निर्भर हैं, और इन एल्गोरिदम को अनुकूलित करने के तरीके हैं जिनका उपयोग नहीं किया गया हो सकता है।


6
हैचेट का उत्तर बहुत अच्छा है, लेकिन अगर यह ध्यान देने योग्य है कि आप दोनों फाइटी (लेवेन्शेटिन) प्रश्नों और ध्वन्यात्मक आधारित प्रश्नों को करने के लिए एलास्टिक्स की तरह कुछ का उपयोग कर सकते हैं और संभवतः बिना अधिक प्रयास के आपको त्वरित मूल्यांकन की अनुमति देगा।
ppearcy

2
मेरे पास इसके लिए एक समान विचार था। मुझे ऑब्जेक्ट.डिस्क्रिप्शन फ़ील्ड की तुलना करने की आवश्यकता है, जिसमें कई शब्द हो सकते हैं। वहाँ पहले से ही इस तरह से कुछ भी किया गया है ... Levenshtein के लिए ES का उपयोग करने के लिए?
वेक्सीनी सिप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.