2008-11-27 8 views
7

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

उदाहरण के लिए, मेरे डेटाबेस में "ए बी विजेट्स & सह लिमिटेड" नाम वाली कंपनी हो सकती है। जबकि मेरा आने वाला डेटा "एबी विजेट्स लिमिटेड", "एबी विजेट्स एंड कंपनी" या "ए बी विजेट" का संदर्भ दे सकता है।

कंपनी के नाम (ए बी विजेट) में कुछ शब्द दूसरों (Co, Ltd, Inc., आदि) से मेल खाने के लिए अधिक महत्वपूर्ण हैं। झूठे मैचों से बचना महत्वपूर्ण है।

कंपनियों की संख्या इतनी छोटी है कि मैं स्मृति में उनके नाम का नक्शा बनाए रख सकता हूं, यानी। मेरे पास सही नाम खोजने के लिए एसक्यूएल के बजाए जावा का उपयोग करने का विकल्प है।

आप जावा में यह कैसे करेंगे?

उत्तर

0

आपका डेटाबेस रेगुलर एक्सप्रेशन की (regex) उपयोग suport सकता है - यहाँ MySQL प्रलेखन के लिए लिंक है (एक उदाहरण के रूप) - जावा में कुछ ट्यूटोरियल के लिए नीचे देखें: आप शायद होगा

http://dev.mysql.com/doc/refman/5.0/en/regexp.html#operator_regexp

डाटाबेस में प्रत्येक कंपनी के लिए एक काफी जटिल नियमित एक्सप्रेस स्टेटमेंट स्टोर करना चाहते हैं जिसमें वर्तनी में भिन्नताएं शामिल हैं - या कंपनी के नाम के उप-तत्व जिन्हें आप महत्वपूर्ण मानते हैं।

आप regex पुस्तकालय जावा

में

JDK का उपयोग कर सकते 1.4.2
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html

JDK 1.5.0
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html

जावा
में http://www.regular-expressions.info/java.html

रेगुलर एक्सप्रेशन का उपयोग करना

जावा रेगेक्स एपीआई समझाया गया
http://www.sitepoint.com/article/java-regex-api-explained/

आप यह भी देख सकते हैं अपने डेटाबेस (उदाहरण के लिए, MySQL करने के लिए नीचे दिए गए लिंक को देखने के)
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

2

Soundex क्षमताओं का समर्थन करता है, तो आप उन्हें स्कोर करने के लिए एक LCS एल्गोरिथ्म का उपयोग कर सकते हैं।

मैं इसे अपने photo album में करता हूं ताकि फ़ोटो में ईमेल करना आसान हो और उन्हें सुरक्षा श्रेणियों में ठीक से लाया जा सके।

0

आप सूचकांक अपने डाटाबेस के Lucene इस्तेमाल कर सकते हैं तो Lucene सूचकांक क्वेरी (एक वर्ग के लोग क्या में प्रवेश किया के आधार पर अनुमान लगा)। सोलर सहित लुसीन के शीर्ष पर बनाए गए कई खोज इंजन हैं।

+0

इस प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। –

+0

प्रतिक्रिया के लिए धन्यवाद, मैंने अपना उत्तर एक उत्तर की तरह बनाया है। –

1

लुसीन पर एक नज़र डालें।यह 'ओपन मैच' क्षमताओं के साथ एक खुली स्रोत पूर्ण पाठ खोज जावा लाइब्रेरी है।

3

आप & इनपुट अपने DB/नक्शे में जितना संभव हो उतना स्वरूपों का मानकीकरण कर सकता है (अर्थात ऊपरी/छोटे अक्षरों में बदलने का), तो आपके सभी प्रसिद्ध नामों के खिलाफ इनपुट स्कोर करने के लिए गतिशील प्रोग्रामिंग से Levenshtein (edit) distance metric का उपयोग करें।

तब आप उपयोगकर्ता को & मैच की पुष्टि कर सकते हैं यदि उन्हें यह पसंद नहीं है, तो उन्हें उस मूल्य को अपने नामों की सूची में दर्ज करने का विकल्प दें (दूसरे विचार पर - जो देने के लिए बहुत अधिक शक्ति हो सकती है एक उपयोगकर्ता ...)

+1

मुझे हाल ही में लगभग 6 महीने पहले इस एल्गोरिदम के बारे में पता चला, लेकिन उसने मुझे अविश्वसनीय रूप से अच्छी तरह से सेवा दी है! यह भी मुझे स्मार्ट दिखता है जब मैं कहता हूं "ओह बस लेवेनशेटिन दूरी का उपयोग करें।" :-) – Aidos

2

मैं एलसीएस को "सह", "llc", "ltd" पर भिन्नता, विराम चिह्न, केस और विविधता को अनदेखा कर दूंगा।

0

वोट अप 1 वोट नीचे

आप उन्हें स्कोर करने के लिए एक LCS एल्गोरिथ्म का उपयोग कर सकते हैं।

मैं इसे अपने फोटो एलबम में करता हूं ताकि फ़ोटो में ईमेल करना आसान हो और उन्हें सुरक्षा श्रेणियों में ठीक से लाया जा सके।

* LCS code 
* Example usage (guessing a category based on what people entered) 

, और अधिक सटीक बेहतर कम से कम आम Subsequence से, कम से कम आम सबस्ट्रिंग अधिक सटीक रूप में पात्रों के क्रम महत्वपूर्ण है होना चाहिए किया जाना है।

3

हालांकि इस सूत्र थोड़ा पुराना है, मैं हाल ही में नाम मिलान के लिए स्ट्रिंग दूरी मैट्रिक्स की क्षमता पर एक जांच किया था और इस पुस्तकालय में आए:

https://code.google.com/p/java-similarities/

आप खर्च करने के लिए नहीं करना चाहते हैं स्ट्रिंग दूरी एल्गोरिदम को कार्यान्वित करने की उम्र, मैं इसे पहले चरण के रूप में आज़माने की सलाह देता हूं, पहले से ही लागू किए गए ~ 20 अलग-अलग एल्गोरिदम हैं (सहित लेवेनशेटिन, जारो-विंकलर, मोंज-एलकन एल्गोरिदम इत्यादि) और इसका कोड पर्याप्त रूप से संरचित है कि आपको पूरे तर्क को गहराई से समझना नहीं है, लेकिन आप इसे मिनटों में उपयोग करना शुरू कर सकते हैं।

(Btw, मैं नहीं पुस्तकालय के लेखक, कर रहा हूँ ताकि इसके निर्माताओं के लिए प्रशंसा।)

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