2008-08-28 24 views
14

मुझे एक साधारण संपर्क डेटाबेस मिला है लेकिन मुझे डुप्लिकेट डेटा में प्रवेश करने वाले उपयोगकर्ताओं के साथ समस्याएं आ रही हैं। मैंने एक साधारण डेटा तुलना लागू की है लेकिन दुर्भाग्यवश डुप्लीकेट डेटा दर्ज किया जा रहा है जो बिल्कुल समान नहीं है। उदाहरण के लिए, नाम गलत तरीके से वर्तनी किए जाते हैं या एक व्यक्ति 'बिल स्मिथ' में डाल देगा और दूसरा एक ही व्यक्ति के लिए 'विलियम स्मिथ' में डाल देगा।डुप्लिकेट डेटा का पता कैसे लगाएं?

तो क्या कुछ प्रकार का एल्गोरिदम है जो कि एक प्रविष्टि के समान प्रतिशत के लिए प्रतिशत दे सकता है?

उत्तर

3

जबकि मेरे पास आपके लिए एल्गोरिदम नहीं है, मेरी पहली कार्रवाई एक नए संपर्क में प्रवेश करने की प्रक्रिया को देखने के लिए होगी। शायद उपयोगकर्ताओं के पास जो संपर्क ढूंढ रहे हैं उसे ढूंढने का कोई आसान तरीका नहीं है। स्टैक ओवरफ़्लो के नए प्रश्न फ़ॉर्म की तरह, आप उन संपर्कों का सुझाव दे सकते हैं जो नई संपर्क स्क्रीन पर पहले से मौजूद हैं।

4

मैं कल्पना है कि इस समस्या को अच्छी तरह से समझा जाता है लेकिन क्या पहली बार पढ़ने पर मेरे लिए होता है:

  • क्षेत्रों की तुलना में व्यक्तिगत रूप
  • उन है कि (मैच की एक संभवतः ढीला परिभाषा मेल गिनती, और संभवतः वजन क्षेत्रों को अलग ढंग से) मानवीय हस्तक्षेप के लिए
  • वर्तमान किसी भी मामले हैं जिनमें कुछ सीमा

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

आप कम से कम पहले झूठी सकारात्मक प्रतियों के प्रति काफी मजबूत पूर्वाग्रह पसंद कर सकते हैं।

5

आप Levenshtein distance के साथ नामों की तुलना कर सकते हैं। यदि नाम समान हैं, तो दूरी 0 है, अन्यथा यह एक स्ट्रिंग को दूसरे में बदलने के लिए आवश्यक न्यूनतम संचालन द्वारा दी जाती है।

+2

यह बिल = विलियम का पता कैसे लगाएगा? उनकी समस्या डुप्लिकेट है, सटीक डुप्लिकेट में वर्तनी की गलतियों को नहीं। –

2

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

उपरोक्त संकुचन, हालांकि, डुप्लिकेट के रूप में विचार करना मुश्किल है और मुझे संदेह है कि यह बुद्धिमान है या नहीं। बिल स्मिथ और विलियम स्मिथ नामक कई लोगों के लिए बाध्य होना आवश्यक है, और आपको चार्ल्स-> चक, रॉबर्ट-> बॉब इत्यादि के साथ पुन: प्रयास करना होगा।

इसके अलावा, यदि आप विचार कर रहे हैं, तो मुस्लिम उपयोगकर्ता, समस्याएं और अधिक कठिन हो जाती हैं (उदाहरण के लिए, बहुत सारे मुस्लिम हैं, जिन्हें मोहम्मद/मोहम्मद नाम दिया गया है)।

+0

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

+0

विशेष रूप से मुस्लिम उपयोगकर्ताओं को अकेले छोड़ने के लिए अनिश्चित। सिख वंश वाले व्यक्ति के पास एक पूर्व पूर्वज होगा जिसने परिवार के नाम को अपनाया [सिंह] (http://en.wikipedia.org/wiki/Singh)। स्वीडिश फोन बुक में जोहान्सन्स एंड एंडर्सन और स्वेन्सन की संख्या बस चौंकाने वाली है; सामान्य स्वीडिश के साथ एमएक्सएन जोहान, एंडर्स, गोरान इत्यादि जैसे पहले नाम हैं। मैं "?" अमेरिकी प्रणालियों में मध्य आरंभिक के रूप में मुझे पूरी तरह से एक की आवश्यकता होती है (लेकिन वे अक्सर इसे भी अस्वीकार करते हैं)। जेसुस और मारिया कई स्पेनिश-भाषा देशों में सबसे पहले नाम हैं। आदि। – tripleee

0

मुझे यकीन है कि यह अच्छी तरह से नाम बनाम उपनाम समस्या के लिए काम करेंगे नहीं हूँ, लेकिन क्षेत्र की इस तरह में सबसे आम एल्गोरिथ्म edit distance/Levenshtein distance एल्गोरिथ्म होगा। यह मूल रूप से एक आइटम को दूसरे में बदलने के लिए आवश्यक चरित्र परिवर्तनों, जोड़ों और निष्कासनों की संख्या की गणना है।

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

ऐसी कुछ कंपनियां हैं जो मेल खाने वाली समस्या में विशेषज्ञ हैं (ज्यादातर राष्ट्रीय सुरक्षा और धोखाधड़ी के अनुप्रयोगों के लिए)। मुझे याद है कि, खोज सॉफ़्टवेयर अमेरिका इन लोगों द्वारा http://www.informatica.com/products_services/identity_resolution/Pages/index.aspx द्वारा खरीदा गया प्रतीत होता है, लेकिन मुझे संदेह है कि इनमें से किसी भी प्रकार के समाधान संपर्क अनुप्रयोग के लिए महंगे होंगे।

3

यदि आपके पास स्ट्रिंग फ़ील्ड के साथ एक बड़ा डेटाबेस है, तो आप simhash एल्गोरिदम का उपयोग कर बहुत से डुप्लीकेट ढूंढ सकते हैं।

7

तो वहाँ कि कैसे समान एक प्रविष्टि एक और करने के लिए है के लिए एक प्रतिशत दे सकते हैं एल्गोरिथ्म किसी प्रकार का है?

ध्वनि और संपादित दूरी (जैसे पिछली पोस्ट में सुझाए गए अनुसार) के रूप में एल्गोरिदम आपकी कुछ समस्याओं को हल कर सकते हैं। हालांकि, अगर आप अपने डेटा की सफाई के बारे में गंभीर हैं, तो यह पर्याप्त नहीं होगा। जैसा कि अन्य ने कहा है कि "बिल" "विलियम" जैसी कुछ भी नहीं सुना है।

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

अपने नियमित रूप से पता तालिका करने के लिए

, जोड़ने के नाम, उदाहरण के लिए: व्यक्ति (प्रथम, RootFirstName, उपनाम, Rootsurname ....) के रूट-संस्करणों

अब, एक मानचित्रण तालिका बनाने के। FirstNameMappings (प्राथमिक कुंजी प्रथम, Rootname)

करके अपने मानचित्रण तालिका भरें: सम्मिलित FirstNameMappings में ध्यान न दें (चयन प्रथम, "अनिर्धारित" व्यक्ति से)

यह आपके व्यक्ति तालिका में सभी firstnames है कि आप जोड़ देगा "UNDEFINED" के रूटनाम के साथ

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

अब अपनी व्यक्तिगत तालिका में "रूटफर्स्टनाम" फ़ील्ड को अपडेट करने के लिए नव निर्मित मानचित्रण तालिका का उपयोग करें। उपनाम और पते के लिए दोहराएं। एक बार ऐसा करने के बाद आपको वर्तनी त्रुटियों से पीड़ित बिना डुप्लीकेट का पता लगाने में सक्षम होना चाहिए।

0

आप संभाव्य मिलान में भी देखना चाहते हैं।

1

FullContact.com में एपीआई है जो आपके लिए इसे हल कर सकती है, यहां उनके दस्तावेज़ देखें: http://www.fullcontact.com/developer/docs/?category=name

उनके पास नाम सामान्यीकरण (विलियम में बिल), नाम डेड्यूसर (कच्चे पाठ के लिए), और नाम समानता (दो नामों की तुलना) के लिए एपीआई हैं।

इस समय सभी एपीआई स्वतंत्र हैं, यह शुरू करने का एक अच्छा तरीका हो सकता है।

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