2013-12-18 12 views
7

मैं एक बड़े शहर डेटाबेस है जो कई विभिन्न स्रोतों से संकलित किया गया है। मैं शहर के नाम के आधार पर आसानी से डुप्लिकेट स्पॉट करने का एक तरीका ढूंढने की कोशिश कर रहा हूं। बेवकूफ जवाब levenshtein दूरी का उपयोग करना होगा। । हालांकि, शहर के साथ समस्या यह है कि वे अक्सर उपसर्गों और प्रत्यय वे किस देश मेंवैकल्पिक/प्रत्यय

उदाहरण के लिए कर रहे हैं के लिए आम हैं कि है:

Boulleville बनाम Boscherville

ये लगभग निश्चित रूप से अलग-अलग शहरों में हैं। हालांकि, क्योंकि वे दोनों "विले" के साथ समाप्त होते हैं (और दोनों "बो" से शुरू होते हैं) उनके पास एक छोटी सी लेवेस्टीन दूरी होती है।

* मैं एक स्ट्रिंग दूरी एल्गोरिथ्म है कि खाते में शब्द शब्द के सिरों पर पत्र की तुलना में अधिक के बीच में पत्र भार से उपसर्गों और प्रत्यय के प्रभाव को कम करने के चरित्र का स्थान ले लेता है के लिए देख रहा हूँ। *

मैं शायद कुछ अपने आप को लिख सकता है, लेकिन मैं यह विश्वास करना मुश्किल है कि कोई भी अभी तक एक उपयुक्त एल्गोरिथ्म प्रकाशित किया है पाते हैं।

+0

मैं इसे लगभग http://stackoverflow.com/questions/10425238/modifying-levenshtein-distance-for-positional-bias के डुप्लिकेट के रूप में बंद कर दूंगा, लेकिन उसमें काम करने के लिए एक कठिन जवाब है ... – Wrikken

उत्तर

2

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

यह भी ध्यान रखें कि सामान्य में भी ग़लत गलत वर्तनी सही पत्र प्राप्त करती है। यह अत्यधिक संभावना है, तो है, कि Cowville और Bowville विभिन्न शहरों हैं, भले ही उनके एल दूरी केवल 1.

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

+0

पहले अक्षर के बारे में बहुत अच्छी बात है। मैं शब्दों के अंत में छोटे शब्द की लंबाई के आधे लंबाई तक आम पात्रों को हटा रहा था। बहु-शब्द शहरों (जैसे लॉस एंजिल्स बनाम लॉस गैटोस) के लिए, मैंने पहली बार तुलना करने से पहले समान स्ट्रिंग को हटा दिया (इसलिए मैं एंजल्स की तुलना गैटोस से करता हूं) – scottmrogowski

3

यह प्राकृतिक भाषा प्रोग्रामिंग में stemming के समान है।

कि क्षेत्र में, एक शब्द के स्टेम आगे के विश्लेषण के प्रदर्शन, जैसे पहले पाया जाता है

run => run 
running => run 
runs => run 

(निश्चित रूप से ran तरह बातें run को स्टेम नहीं। के लिए है कि एक एक lemmatizer उपयोग कर सकते हैं। लेकिन मैं पीछे हटना ...)। भले ही स्टेमिंग एनएलपी में बिल्कुल सही नहीं है, यह उल्लेखनीय रूप से अच्छी तरह से काम करता है।

आपके मामले में, यह Levenstein लागू करने से पहले शहर के नाम के लिए विशिष्ट नियमों का उपयोग कर शहर को रोका जा सके अच्छी तरह से काम कर सकते हैं। मुझे शहरों के लिए एक स्टेमर क्रियान्वयन से अवगत नहीं है, लेकिन नियम सतह पर काफी सरल होने लगते हैं।

आप उपसर्गों की एक सूची और (किसी भी आम प्रकार/टाइपो वर्तनी सहित) और बस Levenstein दूरी की जाँच से पहले इस तरह के एक उपसर्ग/प्रत्यय को दूर प्रत्ययों की सूची के साथ शुरू हो सकता है।

एक तरफ ध्यान दें, यदि आपके पास अतिरिक्त पता जानकारी (जैसे सड़क का पता या ज़िप/पोस्टल कोड) है, तो कई देशों के लिए पता सामान्यीकरण सॉफ़्टवेयर मौजूद है जो पता-विशिष्ट एल्गोरिदम के आधार पर सबसे अच्छा मिलान प्राप्त करेगा।