2012-12-03 27 views
10

मेरे पास व्यक्तिगत नामों का एक बड़ा संग्रह है (उदाहरण के लिए "जॉन स्मिथ")। मैं लोगों को नाम से देखना चाहता हूं। हालांकि, कुछ प्रश्नों को गलत वर्तनी दी जाएगी (उदाहरण के लिए "जोन smth", "johnsm ith")। क्या पाइथन बाइंडिंग के साथ कोई वर्तनी सुधार पुस्तकालय है जो मेरे लिए वर्तनी-सुधारित मैचों को पा सकता है?व्यक्ति के नामों के लिए वर्तनी सुधार (पायथन)

मुझे हुओश और पायथन-एस्पेल के बारे में पता है। हूश की वर्तनी सुधार मेरे लिए काफी काम नहीं करता है क्योंकि यह स्मृति में सही वर्तनी के संग्रह को डिस्क में संग्रहीत करने के बजाय लिखता है। इससे मेरे आवेदन के लिए लुकअप बहुत धीमा हो जाता है। कोड को संरचित करने के तरीके के कारण, इस व्यवहार को बदलने के लिए यह छोटा नहीं लगता है। इसके अलावा, हूश अलग-अलग चरित्र-संपादनों को अलग-अलग वजन नहीं देता है, भले ही, 'वाई' ('जिम' ("जिम काज़िंस्की" -> "जिम काज़िंस्की") के साथ भ्रमित होने की अधिक संभावना है, यह एक 'z' है ।

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

मुझे यह भी जिक्र करना चाहिए कि मैं संग्रह में सभी प्रविष्टियों के लिए प्रत्येक क्वेरी की तुलना नहीं कर सकता - यह बहुत धीमा होगा। कुछ इंडेक्स को पहले से ही बनाया जाना चाहिए।

धन्यवाद!

उत्तर

6

लगता है जैसे (कोई इरादा नहीं है) आपको Metaphone algorithm के कुछ रूप की आवश्यकता है, जिसे पायथन में कार्यान्वित किया गया है और पापी पर उपलब्ध है: http://pypi.python.org/pypi/Metaphone/0.4

वहाँ अन्य एल्गोरिदम भी हैं, इस तरह के Levenshtein और Soundex के रूप में (अभी तक इस का एक विश्वसनीय अजगर कार्यान्वयन नहीं मिला है) - आप इनमें से एक से अधिक का उपयोग करते हुए मीट्रिक के कुछ फार्म की गणना करने के लिए चाहते हो सकता (शायद यह भी अलग अलग भार देना प्रत्येक परिणाम के लिए) संभावित सुधार की परिणाम सूची के साथ आने के लिए।

+0

मेटाफोन लाइब्रेरी उपयोगी दिखती है, इसके लिए धन्यवाद। अगर मैं नामों के लिए अपना खुद का जादू परीक्षक लिखता हूं (और मैं अभी भी उम्मीद कर रहा हूं कि किसी ने पहले ही लिखा है कि मैं इसका उपयोग कर सकता हूं ....), मैं शायद मेट्रिक के एक हिस्से के मेटाफोन मिलान का उपयोग करूंगा। – Jeff

+0

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

+2

[fuzzywuzzy] (http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python) एक विकल्प हो सकता है। – Matthias