मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जो संदर्भ सूची में इकाई नामों को "साफ" करने के लिए संभावित "गन्दा" इकाई नामों के इनपुट सेट से मेल खाने का प्रयास करता है। मैं संपादन दूरी और अन्य सामान्य अस्पष्ट मिलान एल्गोरिदम के साथ काम कर रहा हूं, लेकिन मुझे आश्चर्य है कि क्या कोई बेहतर दृष्टिकोण है जो टर्म वेटिंग की अनुमति देता है, जैसे कि सामान्य शब्दों को अस्पष्ट मैच में कम वजन दिया जाता है।शब्द वजन के साथ धुंधला स्ट्रिंग
पाइथन की difflib
लाइब्रेरी का उपयोग करके इस उदाहरण पर विचार करें। मैं संगठन के नामों के साथ काम कर रहा हूं, जिसमें कई मानकीकृत घटक आम हैं और इसलिए इकाइयों के बीच अंतर करने के लिए उपयोग नहीं किया जा सकता है।
from difflib import SequenceMatcher
e1a = SequenceMatcher(None, "ZOECON RESEARCH INSTITUTE",
"LONDON RESEARCH INSTITUTE")
print e1a.ratio()
0.88
e1b = SequenceMatcher(None, "ZOECON", "LONDON")
print e1b.ratio()
0.333333333333
e2a = SequenceMatcher(None, "WORLDWIDE SEMICONDUCTOR MANUFACTURING CORP",
"TAIWAN SEMICONDUCTOR MANUFACTURING CORP")
print e2a.ratio()
0.83950617284
e2b = SequenceMatcher(None, "WORLDWIDE",
"TAIWAN")
print e2b.ratio()
0.133333333333
दोनों उदाहरण संपूर्ण स्ट्रिंग पर अत्यधिक स्कोर क्योंकि RESEARCH
, INSTITUTE
, SEMICONDUCTOR
, MANUFACTURING
, और CORP
उच्च आवृत्ति, कई संगठन के नाम में सामान्य पदों हैं। मैं फ़ज़ी स्ट्रिंग मिलान (आवश्यक रूप से difflib
का उपयोग नहीं कर रहा) में शब्द आवृत्तियों को एकीकृत करने के तरीके के बारे में किसी भी विचार की तलाश कर रहा हूं, जैसे कि स्कोर सामान्य शब्दों से प्रभावित नहीं होते हैं, और परिणाम "e1b" और " ई 2 बी "उदाहरण।
मुझे लगता है मैं सिर्फ एक बड़ी "अक्सर शब्द" सूची बनाने के लिए और तुलना से उन बाहर कर सकते हैं, लेकिन मैं आवृत्तियों का उपयोग करने के यदि संभव हो क्योंकि भले आम शब्दों जोड़ने कुछ जानकारी, और भी के लिए कटऑफ बिंदु चाहते हैं किसी भी सूची निश्चित रूप से मनमाना होगा।
[हुओश] (https://bitbucket.org/mchaput/whoosh/wiki/Home) दिलचस्प लग रहा है, खासकर इसकी ['स्कोरिंग'] (http://packages.python.org/Whoosh/api/scoring। एचटीएमएल) मॉड्यूल और [whoosh.reading.TermInfo] (http://packages.python.org/Whoosh/api/reading.html?highlight=frequency#whoosh.reading.TermInfo) 'doc_frequency() 'और' weight() ' –
क्या आपके पास फ़ज़ी मैच के नामों के पूर्ण कॉर्पस तक पहुंच है? यदि ऐसा है, तो आप एक अस्पष्ट मिलान मॉडल को प्रशिक्षित करने के लिए टीएफ-आईडीएफ का उपयोग कर सकते हैं। –
आप तारों को विभाजित कर सकते हैं और प्रत्येक टुकड़े पर अंतर की गणना कर सकते हैं। यह आपको _some_ स्थितियों पर मदद करेगा जहां आपके पास लगभग समान नाम हैं लेकिन केवल एक शब्द अंतर के साथ। लेकिन यह संभवतः आप जो करना चाहते हैं उसके लिए पर्याप्त मजबूत नहीं है। – Bakuriu