2011-01-14 18 views
5

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

मेरे पास अणुओं को ग्राफ (परमाणु और बंधन) के रूप में दर्शाया गया है। मेरे पास आकार के आकार के enumerate all subgraphs का एक तरीका है। तकनीकी होने के नाते, इनपुट SMILES हैं और आउटपुट कैननिकल SMARTS है और प्रत्येक सबग्राफ/SMARTS की संख्या होती है।

उदाहरण के लिए, यदि इनपुट अणु "CCO" है तो कैननिकल परिणाम {"सी": 2, "ओ": 1, "सीसी": 1, "ओसी": 1, "सीसीओ": 1 } और यदि अणु "SCO" है तो कैनोलिक परिणाम {"सी": 1, "एस": 1, "ओ": 1, "सीएस": 1, "ओसी": 1, "एससीओ": 1 }। ये छोटे उदाहरण हैं। असली अणु के लिए मुझे लगभग 500 "शब्द" मिलते हैं, जो "सीसी (सी) ओ", "सीसीसीओसीसी", "सीएन" और "सीसीसीसी (सी) ओ" जैसा दिखते हैं।

विशिष्ट तारों के संग्रह के रूप में अणुओं को देखते हुए प्लस मायने रखता है कि मुझे टेक्स्ट स्तर पर तुलना करने के लिए टेक्स्ट खोज टूल का उपयोग करने में सक्षम होना चाहिए, उम्मीद है कि वे रसायन शास्त्र स्तर पर सार्थक हैं।

उदाहरण के लिए, मैं cosine similarity का उपयोग शायद tf-idf वजन के साथ कर सकता हूं और समान उपनिवेशों की तलाश करके समान अणु ढूंढ सकता हूं। उपरोक्त "सीसीओ" और "एससीओ" उदाहरणों के साथ, कोसाइन समानता (2 * 1 + 1 * 1 + 1 * 1)/वर्ग (2 * 2 + 1 * 1 + 1 * 1 + 1 * 1 + 1 * 1)/वर्ग (6 * (1 * 1)) = 4/वर्ग (8 * 6) = 0.58।

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

मैं मौजूद पाठ समाधानों को समझने की कोशिश कर रहा हूं लेकिन यह थोड़ा मुश्किल है। मुझे स्टॉप शब्दों की ज़रूरत नहीं है, मुझे स्टेमिंग की ज़रूरत नहीं है, मुझे शब्द आदेश की परवाह नहीं है; मुझे मौजूद कई विशेषताओं की आवश्यकता नहीं है। मुझे शब्द वैक्टर रखने की क्षमता की आवश्यकता है, क्योंकि यह जानना महत्वपूर्ण है कि "सी" 2 बार या 3.

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

+0

"समानता" का अर्थ आपके लिए क्या है? जैसे "सी = सी" "सी-सी" के लिए "समान" होना चाहिए? "एन" के समान "एन +" है? "सीओ" सी "सी (सी) ओ" आदि के समान है? शायद अगर आपने कुछ उदाहरण खोज दी हैं और परिणाम जो उन्हें मिलना चाहिए, तो यह हमें आपकी इच्छा के बारे में अधिक जानने में मदद करेगा (क्योंकि हम रसायनज्ञ नहीं हैं)। – Xodarap

+0

मेरे पास दोहराए गए शब्द n_i और i <~ 500 के साथ W_i शब्द हैं। मैं जुड़ी परिभाषा के अनुसार, उनके बीच कोसाइन समानता करना चाहता हूं। मुझे लगता है कि मैं जो खोज रहा हूं वह दस्तावेज़ खोज दुनिया में मानक है और रसायन शास्त्र कोई फर्क नहीं पड़ता, लेकिन मैं एक उदाहरण के साथ अपडेट करूंगा। –

+0

यह भी देखें http://stackoverflow.com/questions/2380394/simple-implementation-of-n-gram-tf-idf-and-cosine-similarity-in-python। –

उत्तर

1

संपादित करें: अब मैं इसे बेहतर समझ सकता हूं। आप स्ट्रिंग के रूप में प्रतिनिधित्व ग्राफ की तुलना करना चाहते हैं। तारों में "शब्द" होते हैं जो दोहरा सकते हैं। आप ल्यूसीन का उपयोग कर सकते हैं, इस मामले में मैं सोलर का उपयोग करने के लिए सुझाव देता हूं। असल में, प्रत्येक सोलर दस्तावेज़ में एक फ़ील्ड होगा; फ़ील्ड में स्ट्रिंग होगी, जो मैं आपको अनलॉल करने का सुझाव देता हूं: C:2 के बजाय C C लिखें। यदि आप शब्दों को अलग करने के लिए एक स्थान का उपयोग करते हैं, तो आप व्हाइटस्पेस विश्लेषक का उपयोग कर सकते हैं। यदि आप किसी अन्य विभाजक का उपयोग करते हैं, तो आपको एक कस्टम विश्लेषक लिखना पड़ सकता है, जो करना इतना मुश्किल नहीं है।

क्या यह एक अच्छा विचार है? मुझे यकीन नहीं है।

  1. Lucene (और Solr) जैसे कोज्या समानता का उपयोग नहीं करते जो कोसाइन, TF/आईडीएफ और बूलियन स्कोरिंग मिक्स, कुछ विशिष्ट संशोधनों के साथ, बल्कि Lucene Similarity,: यहाँ क्यों है। यह अधिकांश पाठ उपयोग के मामलों के लिए अच्छा काम करता है, लेकिन आपको जो चाहिए उससे अलग हो सकता है।
  2. क्या आपको विभिन्न खोजों से हिट की तुलना करने की आवश्यकता है? यदि आप करते हैं, तो सोलर का उपयोग करना मुश्किल है, क्योंकि यह प्रत्येक खोज को अधिकतम मान के लिए 1.

मेरा सुझाव है कि आप अपने डेटाबेस के एक छोटे से नमूने के लिए सोलर आज़माएं। यदि सोलर आपके लिए काम करता है, ठीक है। यदि नहीं, तो शिंगलिंग और मिन-हैश शायद जाने का रास्ता हैं। Mining of Massive Datasets by Rajaraman and Ullman इन विषयों के बारे में हाल ही में एक मुफ्त पुस्तक है। मेरा सुझाव है कि आप इसे पढ़ लें। इसमें डेटा के पहाड़ों में समान तारों की खोज शामिल है। मुझे लगता है कि विभेदक है: क्या आपको अपेक्षाकृत बड़े चौराहे की आवश्यकता है? यदि ऐसा है, तो shingling और min-hashes का उपयोग करें। यदि नहीं, शायद सोलर पर्याप्त है।

+0

स्ट्रिंग मिलान और अनुक्रम संरेखण? ऐसा कैसे? मेरे "दस्तावेज़" में "शब्द" होते हैं, जो कैमरे को दोहराया जाता है। एक प्रश्न दस्तावेज़ और एक लक्षित दस्तावेज़ संग्रह को देखते हुए, मैं कोसाइन समानता (कहें) के आधार पर संग्रह में निकटतम 10 ढूंढना चाहता हूं। संरेखण एल्गोरिदम आदेश का तात्पर्य है, जो मेरे डेटा में नहीं है। सुडलैन-वंसच, अहो-कोरासिक और अन्य स्ट्रिंग मैच एल्गोरिदम बस लागू नहीं हैं, कम से कम जहां तक ​​मैं कह सकता हूं। (बीटीडब्लू, मैंने थोड़ी देर के लिए जैव सूचना विज्ञान में काम किया है, इसलिए मुझे कुछ स्थानों का पता चल सकता है जब उनका उपयोग किया जा सकता है।) –

+0

मैंने आपके दस्तावेज़ों और शब्दों को बेहतर तरीके से संबोधित करने के लिए अपना जवाब संपादित कर दिया है। –

+0

मैंने उस पुस्तक को दूसरे दिन पढ़ना शुरू कर दिया और यह बहुत उपयोगी है। मैं सोलर के साथ कोशिश करूंगा और देखें कि क्या होता है। मैं http://nlp.fi.muni.cz/projekty/gensim/index.html पर भी गैन्सिम में आया था। –

1

हम्म ... वास्तव में नहीं जानते कि SMARTS क्या हैं, या वास्तव में रासायनिक समानता कैसे काम करती है। यदि आप ल्यूसीन का उपयोग करना चाहते हैं, तो पहले सोलर का उपयोग करने पर विचार करें। चूंकि आपका डेटा ग्राफ़ में है, इसलिए आप सौर घटक के साथ neo4j पर एक नज़र डाल सकते हैं। साथ ही, क्या यह समस्या डुप्लिकेट के पास दस्तावेज़ से अधिक निकटता से संबंधित होगी? इसके साथ मदद करने के लिए एलएसएच, स्पॉट्सिग, शिंगलिंग और सिमशैश के कई एल्गोरिदम हैं। काश मैं और अधिक मदद कर सकता।

+0

मैं देखना चाहता हूं कि टेक्स्ट खोज ग्राफ खोज को प्रतिस्थापित या सरल कर सकती है या नहीं। 50 मिलियन अणुओं के साथ लगभग 150 मिलियन परमाणु और कई बंधन हैं। मैं नहीं देखता कि कैसे एक सामान्य ग्राफ डीबी neo4j की तरह विशेष रसायन खोज इंजन की क्षमताओं से संपर्क कर सकते हैं। लेकिन 50,000 दस्तावेजों (प्रत्येक अद्वितीय) में 50 मिलियन दस्तावेजों की एक कोसाइन समानता खोज करना आसान होना चाहिए। मैं उस कार्य के लिए एक उपकरण की तलाश में हूं। –

+1

ठीक है, मैं देखता हूं कि आपका क्या मतलब है, ठीक है सौर का उपयोग करना बहुत आसान है। यह लुसीन के शीर्ष पर एक और परत है। क्या आप जानते हैं कि प्रति रासायनिक कितने फ़ील्ड हो सकते हैं? कीवर्ड टोकनेज़र का उपयोग करें ताकि अनुक्रमित होने वाले फ़ील्ड में प्रत्येक इनपुट टोकननाइज्ड न हो, और केवल स्टैमिंग या अन्य विशेष सुविधाओं के साथ इंडेक्सिंग प्रक्रिया फ़िल्टर न करें। मैं अनुशंसा करता हूं कि आपको पैक द्वारा प्रकाशित पुस्तक मिल जाए। मुझे लगता है कि शायद एकमात्र पुस्तक खोज इंजन के उद्यम उपयोगों पर लाभ उठाती है। – Joyce

+0

प्रत्येक यौगिक में लगभग 200,000 शब्द "शब्द" लगभग 200,000 शब्दों की शब्दावली से चुने गए हैं। किताब की सिफारिश के लिए धन्यवाद! –

0

लुसीन का उपयोग न करें। या सौर। आंतरिक मॉडल पुरातन होते हैं और एक साथ घिरे होते हैं; हालांकि वे एक अच्छी नौकरी करते हैं। न्यूनतम मानदंड वाले इंजन खोजें (यदि आप एक टेक्स्ट इंजन के अंदर मैप करना चाहते हैं) BM25F पूरी तरह से समर्थित है। अगर मैं इसके बाद था और मैं स्केलेबिलिटी और प्रदर्शन और कम लागत वाले समर्थन समुदाय चाहता था, तो स्पष्ट रूप से मैं SQL सर्वर और क्यूब्स के साथ जाऊंगा। SQL सर्वर के साथ लाइसेंसिंग एक पूर्ण अवरोधक हो सकता है। सौभाग्य।

+0

मुझे नहीं पता कि बीएम 25 एफ मैं जो कर रहा हूं उसके लिए उपयुक्त क्यों होगा। कोसाइन समानता से बेहतर क्यों होगा? एक दोस्त ने एक्सपियन का सुझाव दिया, जिसमें बीएम 25 का समर्थन है, लेकिन ऐसा लगता है कि इसका व्यापक रूप से उपयोग नहीं किया जाता है। मैं मैक और अन्य यूनिक्स वेरिएंट का उपयोग करता हूं, इसलिए विंडोज-केवल समाधान काम नहीं करेगा। –

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