2009-08-08 9 views
14

का उपयोग समानार्थी शब्द ल्यूसीन का उपयोग करके समानार्थी (वाक्यांश) को संभालने का सबसे अच्छा तरीका क्या है? विशेष रूप से, जब मुझे क्वेरी निष्पादित करने की आवश्यकता होती है: ए या बी या सी नहीं डील्यूसीन

इंडेक्सिंग के दौरान प्रत्येक दस्तावेज़ में "समानार्थी" नामक एक नया फ़ील्ड जोड़ने के बारे में कैसे? इस फ़ील्ड के मान में सभी समानार्थी शब्द होंगे। इसे केवल एक दस्तावेज़ में जोड़ा जाएगा जब उस दस्तावेज़ में समानार्थी शब्द हों।

मैं फिर एक "OR" खोज क्वेरी निष्पादित करूंगा जो इस क्षेत्र में अन्य क्षेत्रों के साथ खोज कीवर्ड की तलाश करेगा।

क्या यह दृष्टिकोण किसी भी प्रकार की क्वेरी के लिए अच्छा काम कर सकता है?

एफवाईआई, मेरे आवेदन में समानार्थी शब्द पूरी तरह से कस्टम हैं और अंग्रेजी शब्दकोश से नहीं ... यानी। "वित्त में वैश्विक नेता" का अर्थ "टॉप इनवेस्टमेंट बैंक" या "फॉर्च्यून 500 फाइनेंस कंपनी इत्यादि आदि का भी हो सकता है।

कृपया सुझाव दें।

धन्यवाद।

उत्तर

11

"वर्डनेट" नामक ल्यूसीन परियोजना में योगदान है। its documentation के अनुसार:

इस पैकेज WordNet द्वारा परिभाषित किया गया है जो बदले में क्वेरी विस्तार के लिए इस्तेमाल किया जा सकता एक Lucene सूचकांक उन्हें भंडारण, निर्माण करने के लिए समानार्थक शब्द का उपयोग करता है। क्वेरी इंडेक्स/"डेटाबेस" बनाने के लिए आप आमतौर पर Syns2Index चलाते हैं, और फिर क्वेरी का विस्तार करने के लिए SynExpand.expand (...) को कॉल करते हैं।

आप क्वेरी में पार कर लेते हैं "बड़ा कुत्ता" तो इसे बाहर प्रिंट:

क्वेरी: big adult^0.9 bad^0.9 bighearted^0.9 boastful^0.9 boastfully^0.9 bounteous^0.9 bountiful^0.9 braggy^0.9 crowing^0.9 freehanded^0.9 giving^0.9 grown^0.9 grownup^0.9 handsome^0.9 large^0.9 liberal^0.9 magnanimous^0.9 momentous^0.9 openhanded^0.9 prominent^0.9 swelled^0.9 vainglorious^0.9 vauntingly^0.9 dog andiron^0.9 blackguard^0.9 bounder^0.9 cad^0.9 chase^0.9 click^0.9 detent^0.9 dogtooth^0.9 firedog^0.9 frank^0.9 frankfurter^0.9 frump^0.9 heel^0.9 hotdog^0.9 hound^0.9 pawl^0.9 tag^0.9 tail^0.9 track^0.9 trail^0.9 weenie^0.9 wiener^0.9 wienerwurst^0.9

आप

यह यह क्या करता है का एक नमूना भी शामिल है देखें कि मूल शब्द ("बड़ा" और "कुत्ता") उनके साथ कोई भार नहीं लगाते हैं। समानार्थी शब्द, हालांकि, एक भार (0.9) है कि आप स्वयं को कॉन्फ़िगर कर सकते हैं।

यह "contrib" निर्देशिका में लुसीन के मानक वितरण के साथ आता है।

+0

आपके इनपुट के लिए धन्यवाद एडम ... क्या आप कृपया मेरे प्रश्न का फिर से उल्लेख कर सकते हैं? अब मैंने इसे संपादित कर लिया है। –

+1

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

0

मैं दर्ज किए गए पूरे वाक्यांश का उपयोग करके एक खोज चलाने के लिए पसंद करता हूं और वजन की खोज की अगली श्रृंखला से वजन कम हो जाता है। मैं फिर वाक्यांश में प्रत्येक शब्द के माध्यम से फिर से शुरू करना पसंद करता हूं और उन परिणामों के साथ कम स्कोर प्राप्त करता हूं। इसके बाद मैं एक से अधिक बार लौटाई गई सभी वस्तुओं के लिए स्कोर एकत्र करता हूं और तदनुसार परिणामों को क्रमबद्ध करता हूं। यह ऐसा करने का 100% सबसे अच्छा तरीका नहीं हो सकता है ... लेकिन यह अतीत में मेरे लिए बहुत अच्छा काम करता है।

1

आप QueryParser.parse() के साथ इनपुट क्वेरी स्ट्रिंग को पार्स करने के बाद क्वेरी ऑब्जेक्ट प्राप्त कर सकते हैं।

ज्यादातर मामलों में, शीर्ष-स्तरीय क्वेरी उप-प्रश्नों के साथ अपने प्रश्नों के साथ बूलियन क्वेरी है। आप क्वेरी ऑब्जेक्ट पर दोबारा पुनरावृत्त कर सकते हैं। जब आप TermQuery या PhraseQuery ऑब्जेक्ट को दबाते हैं, तो आप (उप) क्वेरी प्राप्त कर सकते हैं, और उस क्वेरी ऑब्जेक्ट को एक बूलियन क्वेरी ऑब्जेक्ट से प्रतिस्थापित कर सकते हैं जिसमें इसके synoyms, यदि कोई हो।

अनिवार्य रूप से, आप अपने मूल प्रश्न बदलने रहे

a OR b AND c 

(a OR synA) OR (b OR synB1 OR synB2) AND c 

क्वेरी वस्तु पर आपरेटिंग के लिए सुनिश्चित करें कि आप बस नए प्रश्नों के साथ क्वेरी की पत्र-गांठ की जगह और बेला नहीं है मनमाने ढंग से जटिल क्वेरी पदानुक्रम के साथ।