2011-12-02 21 views
13

सी ++ और/या जावा में ध्वन्यात्मक खोज को लागू करने का सबसे प्रभावी तरीका क्या है? ध्वन्यात्मक खोज से मेरा मतलब है स्वरों या व्यंजनों को प्रतिस्थापित करना जो समान लगता है। यह विशेष रूप से नामों के लिए उपयोगी होगा क्योंकि कभी-कभी लोगों के नामों में अजीब वर्तनी होती है।फोनेटिक खोज को लागू करने का सबसे प्रभावी तरीका

मुझे लगता है कि यह स्वरों और कुछ व्यंजनों को प्रतिस्थापित करने के लिए प्रभावी हो सकता है। कुछ विशेष मामलों जैसे कि मौन ई के अंत में या एफ और पीएच शामिल करना भी अच्छा हो सकता है। क्या C++ में cstrings या तारों का उपयोग करना सबसे अच्छा होगा? प्रतिलिपि मूल्यों के साथ स्मृति में एक प्रतिलिपि को स्टोर करना बेहतर होगा या हर बार जब हम कुछ ढूंढेंगे तो फ़ंक्शन को कॉल करना बेहतर होगा?

उत्तर

13

Soundex इसके रूपों के साथ इसके लिए मानक एल्गोरिदम है। यह नाम को अल्फान्यूमेरिक कोड में बदलने के लिए ध्वन्यात्मक नियमों का उपयोग करता है। एक ही कोड के साथ नाम एक साथ समूहीकृत हैं।

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

मुझे यकीन है कि वास्तव में क्या आप cstring मतलब नहीं कर रहा हूँ (माइक्रोसॉफ्ट के CString?), लेकिन मानक std::string वर्ग इस समस्या के लिए पूरी तरह से ठीक हो जाएगा और मेरी पसंदीदा विकल्प होगा।

+0

मेरा मतलब है' char' प्रकार का सरणी। –

+1

@ user964672: यहां ऐसा करने का कोई कारण नहीं है - मेरी सलाह 'std :: string' के साथ रहना होगा। – NPE

19

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

जर्मन उच्चारण के लिए मैं "कोल्नेर फोनेटिक" का उपयोग करता हूं। http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html

बस:

अपाचे कॉमन्स कोडेक आप एक बहुत ही सरल जावा उन बुनियादी एल्गोरिदम के कार्यान्वयन (Soundex, metaphone, ...) http://commons.apache.org/codec/ उदाहरण के लिए soundex के लिए जावाडोक देखने देता है निम्नलिखित कोड टाइप करके आप अपने स्ट्रिंग का फोनेटिक मान:

Soundex soundex = new Soundex(); 
String phoneticValue = soundex.encode("YourString"); 

और फिर आप इसे दो के लिए कर सकते हैं स्ट्रिंग्स और फोनेटिक मानों की तुलना करें। Hava निम्नलिखित पोस्ट पर एक नज़र आप, दो तार तुलना कर रहे हैं क्योंकि बराबर() पद्धतियों सिर्फ काले और सफेद है, और हो सकता है आप को पता है कि यह कैसे कई% मिलान किया जाता है चाहते हैं:

How to compare almost similar Strings in Java? (String distance measure)

'Cstring` द्वारा
+0

आप "Kölner Phonetik" – mica

+1

हाँ की एक जावा कार्यान्वयन पता है - हम Apache Commons कोडेक का इस्तेमाल किया। यहां आपको "कोलोनफोनेटिक" कक्षा मिलती है। 'नया कोलोनफोनेटिक()। एन्कोड ("हंस")'। लेकिन अब हम जर्मन भाषा के लिए इसका उपयोग नहीं कर रहे हैं, यह बहुत सी चीजों को अनदेखा कर रहा था और लगभग सभी शब्दों को बराबर माना जाता था। के लिए जर्मन – FiveO

+0

मैं हनोवर-स्वर, एक जावा कार्यान्वयन phonet4java, पाया टैक्सी यहां पाया जा: http://code.google.com/p/phonet4java – mica

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