2010-05-07 10 views
5

चलें कहते हैं कि मैं तीन मॉडल/तालिकाओं है: operating_systems, words, और programming_languages:वुल्फ्राम | अल्फा जैसे छोटे इंजन कैसे बनाएं?

# operating_systems 
name:string created_by:string family:string 
Windows  Microsoft   MS-DOS 
Mac OS X Apple    UNIX 
Linux  Linus Torvalds UNIX 
UNIX  AT&T    UNIX 

# words 
word:string defenitions:string 
window  (serialized hash of defenitions) 
hello  (serialized hash of defenitions) 
UNIX  (serialized hash of defenitions) 

# programming_languages 
name:string created_by:string example_code:text 
C++   Bjarne Stroustrup #include <iostream> etc... 
HelloWorld Jeff Skeet  h 
AnotherOne Jon Atwood  imports 'SORULEZ.cs' etc... 

एक उपयोगकर्ता खोज करता है hello, प्रणाली की 'हैलो' defenitions को दर्शाता है। यह लागू करने के लिए अपेक्षाकृत आसान है। हालांकि, जब कोई उपयोगकर्ता UNIX खोजता है, तो इंजन को चुनना होगा: word या operating_system। साथ ही, जब कोई उपयोगकर्ता windows (छोटा अक्षर 'डब्ल्यू') खोजता है, तो इंजन word चुनता है, लेकिन Assuming 'windows' is a word. Use as an <a href="etc..">operating system</a> instead भी दिखाना चाहिए।

क्या कोई मुझे पार्सिंग के साथ सही दिशा में इंगित कर सकता है और खोज क्वेरी का विषय चुन सकता है? धन्यवाद।


नोट: यह गणना वाशिंगटन कर सकते हैं के रूप में प्रदर्शन करने में सक्षम होने की जरूरत नहीं है।

उत्तर

2

एक नया सूचकांक तालिका है terms कहा जाता है जिसमें प्रत्येक वैध अवधि का टोकनयुक्त संस्करण होता है। इस तरह, आपको केवल एक टेबल खोजनी है।

# terms 
Id Name  Type    Priority 
1 window word    false 
2 Windows operating_system true 

फिर आप देख सकते हैं कि उपयोगकर्ता खोज शब्द कितना करीब है। अर्थात। "विंडोज़" 2 के साथ 100% मैच होगा - इसलिए मान लें कि, लेकिन 1 पर एक करीबी मैच भी है, इसलिए एक विकल्प के रूप में सुझाव दें। आपको अपना खुद का नियम इंजन लिखना होगा, जिसने फैसला किया कि एक शब्द मिलान कितना करीब है (यानी "विंडोज़" बनाम "विंडोज़" के साथ क्या माना जाता है?) Priority फ़ील्ड अंतिम निर्णयकर्ता हो सकता है यदि नियम इंजन निर्णय नहीं ले सकता है, और सिद्धांत में उपयोगकर्ता गतिविधि द्वारा संचालित किया जा सकता है, इसलिए यह सीखता है कि उपयोगकर्ता किस संदर्भ में अधिक संभावना रखते हैं।

+0

धन्यवाद, मैं इसे देख लूंगा। –

+0

मैं इसे काम करने में कामयाब रहा! मैं डेटा प्रदर्शित करने के लिए आंशिक का उपयोग करता हूं। प्रति आंशिक एक आंशिक। –

1

और डेटाबेस तालिका के रूप में कैश बनाने के बारे में क्या है जहां सभी कीवर्ड होंगे।

SELECT * FROM keywords WHERE keyword = '<YourKeyWord>' /* mysql */ 

कीवर्ड तालिका अपने मॉड्यूल के लिए संदर्भ के कुछ प्रकार के होते हैं:

खोज क्वेरी के कुछ इस तरह होगा।

इस दृष्टिकोण का लाभ निश्चित रूप से तेज़ खोज है।

आप व्यवहार आप के लिए पूछना अनुकरण करने के क्रम में दो प्रश्नों का उपयोग कर सकते हैं:

  • सटीक मिलान (mysql में कोई समस्या नहीं)
  • मामले असंवेदनशील खोज
0

वोल्फ्राम अल्फा आपके उदाहरण से कहीं अधिक जटिल है ... मैं इसके आंतरिक कार्यों में से कुछ निश्चित नहीं हूं (मैंने इसे बहुत कम पढ़ा है), लेकिन मेरा मानना ​​है कि यह एक बहुत बड़ा और जटिल automated inference system है। वे लागू करने के लिए अपेक्षाकृत तुच्छ हैं (प्रोलॉग मूल रूप से एक सामान्य उद्देश्य है जिसे आप जो भी डेटा चाहते हैं उसे डाल सकते हैं), लेकिन वे उपयोगी बनाने में बहुत मुश्किल हैं।

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