में फ़ज़ी स्ट्रिंग मिलान में मेरे पास थोड़ा अलग नामकरण सम्मेलनों के साथ दस लाख से अधिक नामों की 2 सूचियां हैं। 95% आत्मविश्वास के तर्क के साथ, उन रिकॉर्ड्स से मेल खाने का लक्ष्य यह समान है।पायथन
मुझे पता है कि पुस्तकालयों में मैं लीवरेज कर सकता हूं, जैसे कि पाइथन में फ़ज़ीवेज़ी मॉड्यूल।
हालांकि प्रसंस्करण के मामले में ऐसा लगता है कि यह 1 से अधिक सूची में प्रत्येक स्ट्रिंग की तुलना में बहुत अधिक संसाधन लेगा, जिसमें इस मामले में 1 मिलियन की पुनरावृत्ति की आवश्यकता होती है।
क्या इस समस्या के लिए कोई और अधिक प्रभावी तरीका है?
अद्यतन:
तो मैं एक bucketing समारोह बनाया और रिक्त स्थान को, प्रतीकों को दूर करने और मूल्यों परिवर्तित लोअरकेस आदि का एक सरल सामान्य आवेदन किया ...
for n in list(dftest['YM'].unique()):
n = str(n)
frame = dftest['Name'][dftest['YM'] == n]
print len(frame)
print n
for names in tqdm(frame):
closest = process.extractOne(names,frame)
तक अजगर पांडा का उपयोग कर, डेटा वर्षों से समूहित छोटी बाल्टी से भरा हुआ है और फिर FuzzyWuzzy मॉड्यूल का उपयोग करके process.extractOne
का उपयोग सर्वोत्तम मिलान प्राप्त करने के लिए किया जाता है।
परिणाम अभी भी कुछ निराशाजनक हैं। परीक्षण के दौरान उपर्युक्त कोड का उपयोग परीक्षण डेटा फ्रेम पर किया जाता है जिसमें केवल 5 हजार नाम होते हैं और लगभग पूरे घंटे तक लगते हैं।
परीक्षण डेटा को विभाजित किया गया है।
- नाम
- वर्ष जन्म
और मैं उन्हें बाल्टी, जहां उनके YMS एक ही बाल्टी में हैं द्वारा की तुलना कर रहा हूँ की तिथि का महीना।
समस्या का उपयोग कर रहे फ़ज़ीवेज़ी मॉड्यूल के कारण समस्या हो सकती है? किसी भी मदद की सराहना करते हैं।
आप नामों को सामान्य करने और सामान्यीकृत रूपों की तुलना करने का प्रयास कर सकते हैं। यह काफी समांतर हो जाता है। – Alec
सामान्यीकरण के बारे में जाने पर आप कैसे सिफारिश करेंगे? क्या कोई मानक विधि लागू हो सकती है? आपकी प्रतिपुष्टि की सराहना। – BernardL
वैसे यह नामकरण मतभेदों के प्रकार पर निर्भर करता है? एक साधारण उदाहरण के रूप में, कंपनी के नाम से मेल खाते हुए, मैं चीजों के वाक्यांशों को 'लिमिटेड' या 'INC' और शायद यहां तक कि गैर-अक्षरों को भी हटा सकता हूं। – Alec