2010-11-18 18 views
8

मुझे पता है कि इस सवाल से बहुत समय पूछा गया है। मुझे एक सुझाव चाहिए कि एल्गोरिदम अनुमानित स्ट्रिंग मिलान के लिए उपयुक्त है।अनुमानित स्ट्रिंग मिलान

एप्लिकेशन विशेष रूप से केवल कंपनी के नाम से मेल खाता है और कुछ भी नहीं।

सबसे बड़ी चुनौती शायद कंपनी के अंत नाम भाग और संक्षिप्त नाम भाग उदाहरण: 1. कंपनी ए पीटीआई बनाम कंपनी एटीटी। लि। बनाम कंपनी ए 2. डब्ल्यूईएस इंजीनियरिंग बनाम डब्ल्यूईएस इंजीनियरिंग (अत्यंत दुर्लभ मौका)

क्या आपको लगता है कि लेवेनशेटिन संपादित दूरी पर्याप्त है?

मैं उपयोग कर रहा हूँ सी #

सादर

, मैक्स

+0

मुझे लगता है कि मैं सभी डॉट चार दूर करने के लिए और फिर बाद में Levenshtein दूरी का उपयोग जा रहा हूँ। बस एक नोट, मुझे एक और एल्गोरिदम मिला जो लेवेनशेटिन की तुलना में समान लेकिन तेज है, लड़के को एल्गोरिदम sift3 नाम दिया गया है। बहुत ही रोचक। – Max

उत्तर

14

विभिन्न स्ट्रिंग दूरी मीट्रिक्स हैं जिनका आप उपयोग कर सकते हैं।

मैं Jaro-Winkler की अनुशंसा करता हूं। संपादन दूरी के विपरीत जहां तुलना का परिणाम संपादन की अलग इकाइयों में है, जेडब्ल्यू आपको 0-1 स्कोर देता है। यह विशेष रूप से उचित नामों के लिए उपयुक्त है। इसके अलावा this nice tutorial को देखो और this SO question.

मैं के साथ सी # काम नहीं किया लेकिन यहां जेडब्ल्यू के कुछ कार्यान्वयन मैंने पाया हैं ऑनलाइन:

Impl 1 (वे भी यदि आप फ़ाइल सूची को देखने के एक डॉट नेट संस्करण है)

Impl 2


आप थोड़ा और अधिक परिष्कृत मिलान करना चाहते हैं, तो आप शब्द रूपों में से कुछ कस्टम सामान्य आमतौर पर कंपनी के नाम में होने वाली करने की कोशिश कर सकते हैं इस तरह के ltd/limited, inc/incorporated, corp/corporation जैसा भी मामला असंवेदनशीलता, संक्षिप्त आदि इस तरह के लिए खाते में करने के लिए यदि आप गणना

distance (normalize("foo corp."), normalize("FOO CORPORATION"))

आप जो है आप अगर आपको मिलेगा क्या परिणाम मिलना चाहिए 0 के बजाय 14 हो (गणना की गई लेवेनशेटिन संपादन दूरी)।

+1

लिंक के लिए धन्यवाद, वे बहुत उपयोगी हैं – Max

1

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

आप संभवतः Soundex का उपयोग भी कर सकते हैं, लेकिन मुझे नहीं लगता कि आपको इसकी आवश्यकता होगी।

1

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

+0

यह एक बहुत ही रोचक सुझाव है! – Max

0

मैंने अपना जवाब पहले ही किसी अन्य प्रश्न में प्रदान किया है।

https://stackoverflow.com/a/30120166/2282794

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

अगर हम लगभग स्ट्रिंग मिलान एल्गोरिदम के बारे में बात करना चाहते हैं, तो बहुत सारे हैं। उनमें से कुछ हैं: जारो-विंकलर, संपादित दूरी (लेवेनशेटिन), जैककार्ड समानता, साउंडएक्स/फोनेटिक्स आधारित एल्गोरिदम इत्यादि। एक साधारण गुगल हमें सभी विवरण देगा। आप उन सभी को C#

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

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

मैंने शायद लुसीन के बारे में बात की हो जो कि जावा के लिए विशिष्ट है लेकिन नेट के लिए लुसीन भी है।

https://lucenenet.apache.org/

संबंधित मुद्दे