2012-02-15 8 views
5

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

ये अनुक्रमणिका बाद में दस्तावेज़ समानता जांच और खोज आदि के लिए उपयोग की जाएंगी। कोई सुझाव मैं इन समस्याओं का मुकाबला कैसे कर सकता हूं? मैंने एक शब्दसूची के साथ स्कैन किए गए शब्द से मेल खाने का विचार सोचा है, लेकिन समस्या यह है कि उचित संज्ञाएं और गैर-शब्दकोष शब्द छोड़े जाएंगे।

जानकारी: मेरे कोड जावा

+0

क्या यह एक खोज इंजन नहीं है? क्या आप अपाचे सोलर को इंस्टॉल नहीं कर सकते हैं और फिर इसे टीबीएनआईएस कार्य करने के लिए अपनी फाइलों पर चला सकते हैं? या किसी को याद किया था? – PurplePilot

+0

@PurplePilot: मुझे मैन्युअल रूप से प्रसंस्करण करने की आवश्यकता है, इसलिए आप एक एपीआई, या संबंधित एल्गोरिदम का सुझाव दे सकते हैं। – phoxis

+0

आप यह कोशिश कर सकते हैं http://tipsandtricks.runicsoft.com/Other/JavaStemmer.html – PurplePilot

उत्तर

3

में है मुझे लगता है कि आप तकनीक का एक संयोजन लागू करना चाहिए।

1) सामान्य वर्तनी प्रकारों के लिए मैं एक शब्दकोश-आधारित विधि के साथ जाऊंगा। चूंकि वे आम हैं, इसलिए मैं गैर-शब्दकोष शब्दों को खोने के बारे में चिंता नहीं करता। वह रंग/रंग की समस्या को हल करना चाहिए।

2) टाइपो और अन्य गैर-मानक वर्तनी प्रकारों के लिए आप टोकन को उनके अंग्रेजी उच्चारण के प्रतिनिधित्व में बदलने के लिए मेटाफोन (http://en.wikipedia.org/wiki/Metaphone) एल्गोरिदम लागू कर सकते हैं। इसी तरह के संस्करण समान ध्वनि होते हैं, इस प्रकार आप उन्हें एक-दूसरे से मिल सकते हैं (उदाहरण के लिए, जॉन से जॉन)। आप क्वेरी के दौरान संपादन-दूरी-आधारित मिलान एल्गोरिदम का भी उपयोग कर सकते हैं ताकि बहुत ही समान टोकन से मिलान किया जा सके, केवल वर्णों की एक जोड़ी जुड़ा हुआ हो या एक वर्ण-गिरावट (उदा। हुसैन बनाम हाउसिन)।

3) बीच में हेफ़ेन के साथ एस्ट्रोफ़े और यौगिक शब्दों के लिए, आप दोनों प्रकारों को स्टोर कर सकते हैं। उदाहरण के लिए, "जॉन्स" को "जॉन एस" और "जॉन्स" दोनों के रूप में अनुक्रमित किया जाएगा। "रिक्त स्थान" को "रिक्त स्थान" और "रिक्त स्थान" के साथ परिवर्तित किया जा सकता है (या साथ में संग्रहीत)।

4) के बीच, आप इस तरह Solr के HyphenationCompoundWordTokenFilterFactory वर्ग के रूप में एक बाहरी पुस्तकालय इस्तेमाल कर सकते हैं किसी भी हाइफन बिना यौगिक शब्दों के लिए (http://lucene.apache.org/solr/api/org/apache/solr/analysis/ HyphenationCompoundWordTokenFilterFactory.html)। हालांकि यह एक शब्दकोश का उपयोग कर सकते हैं, यह करने की ज़रूरत नहीं है। यह उन यौगिक शब्दों से निपटने के लिए लक्षित है जिन्हें अक्सर जर्मन और इसी तरह की भाषाओं में सामना किया जाता है। मुझे कोई कारण नहीं दिख रहा है कि आप इसे अंग्रेजी में क्यों लागू नहीं कर सकते हैं (आपको एक अंग्रेजी शब्दकोश और हाइफेनेशन नियम फाइलों की आपूर्ति करने की आवश्यकता होगी)।

वास्तव में, अंतिम बिंदु एक महत्वपूर्ण सवाल उठाता है। मुझे नहीं लगता कि आप खरोंच से अपनी खुद की खोज पुस्तकालय बनाने के लिए तैयार हैं। यदि यह सच है तो आप जावा-आधारित सर्च लाइब्रेरी में ल्यूसीन (या सोलर, जो ल्यूसीन पर आधारित है) का उपयोग क्यों नहीं करते हैं, जिनके पास पहले से ही इन समस्याओं से निपटने के तरीके और तरीके हैं? उदाहरण के लिए, इंजेक्शन तकनीक आपको दस्तावेज़ में एक ही स्थान पर रंग और रंग दोनों को इंडेक्स करने की अनुमति देती है; इस प्रकार इससे कोई फर्क नहीं पड़ता कि आप "रंगीन कारों" या "रंगीन कारों" की खोज करते हैं (मानते हैं कि आप स्टेमिंग का ख्याल रखते हैं)। ऐसे फ़िल्टर हैं जो फोनेटिक इंडेक्सिंग (http://lucene.apache.org/solr/api/org/apache/solr/analysis/PhoneticFilterFactory.html) करते हैं। यहां तक ​​कि एक FuzzyQuery घटक भी है जो आपको समान शर्तों से मेल खाने के लिए संपादन दूरी की एक निश्चित मात्रा की अनुमति देता है (http://lucene.apache.org/core/old_versioned_docs/versions/3_2_0/api/all/org/apache/lucene/ खोज/FuzzyQuery.html)

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

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