2008-09-03 20 views
106

संभव डुप्लिकेट:
How does the Google “Did you mean?” Algorithm work?आप "क्या आपका मतलब" लागू करते हैं?

मान लीजिए आप अपनी वेबसाइट में पहले से ही एक खोज प्रणाली है। आप "क्या मतलब था: <spell_checked_word>" जैसे Google को कुछ search queries में कैसे किया जा सकता है?

+0

@pek: मैंने थोड़ी देर पहले एक ही विचार किया था ... क्या आपने एक HTML स्क्रबर का उपयोग करने और सुधारों के स्रोत के रूप में Google का उपयोग करने का विचार किया है? –

+0

Google एपीआई के लिंक के लिए http://stackoverflow.com/questions/3763640/where-can-i-learn-more-about-the-google-search-did-you-mean-algorithm – John

उत्तर

81

असल में Google जो करता है वह बहुत ही गैर-तुच्छ और पहले काउंटर-सहज ज्ञान युक्त होता है। वे किसी शब्दकोश के खिलाफ जांच की तरह कुछ नहीं करते हैं, बल्कि वे "समान" प्रश्नों की पहचान करने के लिए आंकड़ों का उपयोग करते हैं जो आपकी क्वेरी से अधिक परिणाम लौटाते हैं, सटीक एल्गोरिदम निश्चित रूप से ज्ञात नहीं है।

यहां हल करने के लिए विभिन्न उप-समस्याएं हैं, सभी प्राकृतिक भाषा प्रसंस्करण आंकड़ों के लिए मौलिक आधार के रूप में वहां एक पुस्तक होना चाहिए: Foundation of Statistical Natural Language Processing

शब्द/क्वेरी समानता की समस्या को हल करने के लिए ठोस रूप से मेरे पास Edit Distance का उपयोग करने के साथ अच्छे परिणाम हुए हैं, स्ट्रिंग समानता का गणितीय माप जो आश्चर्यजनक रूप से अच्छी तरह से काम करता है। मैं लेवेनशेटिन का उपयोग करता था लेकिन दूसरों को देखने लायक हो सकता है।

साउंडएक्स - मेरे अनुभव में - बकवास है।

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

6

मैं आपके डेटाबेस में समान शब्दों को खोजने के लिए SOUNDEX पर विचार करने का सुझाव दूंगा।

आप Google API spelling suggestion request का उपयोग कर Google के शब्दकोश को भी एक्सेस कर सकते हैं।

+1

+1 देखें ऐसा लगता है कि पूछताछ करने वाला वास्तव में क्या देख रहा था, भले ही चुना गया उत्तर गहराई से अधिक हो और Google के कार्यान्वयन के 'क्यों' और 'कैसे' का उत्तर दें। – dimo414

0

Soundex ध्वन्यात्मक मैचों के लिए अच्छा है, लेकिन (यह मूल रूप से जनगणना के आंकड़ों के लिए विकसित किया गया था)

भी पूर्ण पाठ-अनुक्रमण की जाँच, वाक्य रचना गूगल तर्क से अलग है लोगों के नामों के साथ सबसे अच्छा काम करता है, लेकिन यह है बहुत तेज़ और समान भाषा तत्वों से निपट सकते हैं।

+0

साउंडएक्स की बुरी चीजों में से एक यह है कि यह भी अंग्रेजी केंद्रित है – Javier

+0

इसे Anglisize नामों के लिए विकसित किया गया था, इसलिए स्मिथ और श्मिट इस में मेल खाने का अनुमान लगाते हैं। मेटाफोन बेहतर है लेकिन एक समान समस्या है। कोई भी फोनेटिक एल्गोरिदम भाषा निर्भर होने जा रहा है। पोर्टर स्टेमिंग पर – Keith

0

साउंडएक्स और "पोर्टर स्टेमिंग" (साउंडएक्स छोटा है, पोर्टर स्टेमिंग के बारे में निश्चित नहीं है)।

+1

सूचना (1 9 अलग-अलग कोडिंग भाषाओं में कार्यान्वयन सहित) http://tartarus.org/~martin/PorterStemmer/index.html – msanders

13

लेवेनशेटिन दूरी के बारे में विकिपीडिया पर this आलेख देखें। सुनिश्चित करें कि आप संभावित सुधारों पर एक अच्छा नज़र डालें।

+0

पर सबसे आम संपादन दूरी गणना पर पाया जा सकता है। ऐसा करने का एक आम तरीका है वाग्नेर-फिशर एल्गोरिदम। – Giuliano

4
+0

क्या आप इस लिंक पर विस्तार कर सकते हैं, यदि आपका लिंक लिंक-रोट या रैंपेंट डिलीशनिज्म से मर जाता है? एंकर पहले से ही मर चुका है ... –

2

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

4

मुझे लगता है कि यह इस पर निर्भर करता है कि आपकी वेबसाइट कितनी बड़ी है। हमारे स्थानीय इंट्रानेट पर जिसका उपयोग लगभग 500 सदस्य कर्मचारियों द्वारा किया जाता है, मैं केवल उन खोज वाक्यांशों को देखता हूं जो शून्य परिणाम लौटाते हैं और SQL खोज में नए सुझाए गए खोज वाक्यांश के साथ उस खोज वाक्यांश को दर्ज करते हैं।

यदि कोई खोज परिणाम वापस नहीं किया गया है, तो मैं उन्हें उस तालिका पर कॉल करता हूं, हालांकि, यह केवल तभी काम करता है जब साइट अपेक्षाकृत छोटी हो और मैं केवल खोज वाक्यांशों के लिए ऐसा करता हूं जो सबसे आम हैं।

तुम भी एक ऐसी ही सवाल का मेरा उत्तर को देखने के लिए चाहते हो सकता है:

6

आप पीटर Norvig के "How to Write a Spelling Corrector" लेख को देखने के लिए चाहते हो सकता है।

+0

सही, धन्यवाद! –

6

मेरा मानना ​​है कि Google सभी प्रश्नों को लॉग करता है और पहचानता है जब कोई वर्तनी सुधार करता है। तब यह सुधार सुझाया जा सकता है जब अन्य एक ही पहली क्वेरी की आपूर्ति करते हैं। यह किसी भी भाषा के लिए काम करेगा, वास्तव में किसी भी पात्र की किसी भी स्ट्रिंग।

+0

वे वास्तव में करते हैं। इससे उन्हें आसानी से नए शब्दों को सीखने में मदद मिलती है - उन्हें लाखों लोगों की मदद मिलती है। –

+2

हां, यह वास्तव में सही जवाब है। "इन द प्लेक्स" पुस्तक के मुताबिक, Google उन मामलों की तलाश करता है जहां कोई कुछ खोजता है, परिणाम प्राप्त करता है, फिर तुरंत अपने खोज शब्दों को थोड़ा समायोजित करता है। –

33

Google के डॉ नॉरविग ने बताया है कि यह कैसे काम करता है;

http://googlesystem.blogspot.com/2007/04/simplified-version-of-googles-spell.html

http://www.norvig.com/spell-correct.html

डॉ Norvig भी चर्चा "क्या आपका मतलब" this excellent talk में: वह भी एक 20ish लाइन अजगर कार्यान्वयन देता है। डॉ Norvig Google पर अनुसंधान का प्रमुख है - जब पूछा गया कि "आपका मतलब क्या है" लागू किया गया है, तो उसका जवाब अधिकृत है।

तो इसकी वर्तनी-जांच, संभावित रूप से गतिशील शब्दकोश के साथ अन्य खोजों या यहां तक ​​कि वास्तविक इंटरनेट वाक्यांशों से भी बना है। लेकिन यह अभी भी वर्तनी जांच है।

SOUNDEX और अन्य अनुमानों में कोई नज़र नहीं है, लोग!

+4

डॉ नॉरविग ने अवधारणा का एक खिलौना उदाहरण प्रदान किया; यह वेब के लिए 'आपका मतलब' प्रदान करने के लिए पर्याप्त सटीक नहीं है।उदाहरण के लिए: "बराक" एक सुझाव नहीं देता है; "बराक ओबामा" करता है (क्योंकि उन्हें पता है कि "बराक" अक्सर ओबामा के साथ होता है, और संभावित सुधार – SquareCog

+2

का अनुमान लगा सकता है, अपने खिलौना वर्तनी परीक्षक से कुछ ऐसा करना मुश्किल नहीं है जो आपके उदाहरण को संभालने में सक्षम हो और यह अच्छी तरह से काम करे। याद रखने की बात यह है कि वह एक जादू परीक्षक दिखा रहा है जो एक प्रश्नकर्ता से काफी अलग है लेकिन अंग्रेजी पाठ के बजाए पिछले प्रश्नों के साथ इसे प्रशिक्षण देना शुरू करने के लिए एक अच्छी जगह है। – jshen

+0

केवल वर्तनी-जांच की तुलना में इसके लिए निश्चित रूप से अधिक है। एक बात के लिए, मैंने ऐसे मामलों को देखा है जहां न तो मैंने जो चीज टाइप की थी और न ही सुझाए गए प्रतिस्थापन "शब्दकोष शब्द" हैं। –

0

वहाँ कुछ aspell कहा जाता है कि मदद दे सकता है: http://blog.evanweaver.com/files/doc/fauna/raspell/classes/Aspell.html

इसके लिए एक गहरे लाल रंग का रत्न नहीं है, लेकिन मैं कैसे अजगर http://blog.evanweaver.com/files/doc/fauna/raspell/files/README.html

यहाँ से यह बात करने के लिए पता नहीं है एक बोली माणिक से है कार्यान्वयन

प्रयोग

Aspell आप शब्दों की जाँच करें और corre सुझाव देने देता है ctions।

string = "my haert wil go on" 

    string.gsub(/[\w\']+/) do |word| 
    if !speller.check(word) 
     # word is wrong 
     puts "Possible correction for #{word}:" 
     puts speller.suggest(word).first 
    end 
    end 

यह आउटपुट: उदाहरण के लिए:

haert के लिये संभावित सुधार: दिल Wil के लिए संभावित सुधार: विल

0

एक प्रभावी तरीके से खोज इंजन के लिए वर्तनी सुधार को लागू नहीं है तुच्छ (आप केवल हर संभव शब्द में संपादन/लेवेनशेटिन दूरी की गणना नहीं कर सकते हैं)। के-ग्राम इंडेक्स पर आधारित एक समाधान Introduction to Information Retrieval (पूर्ण पाठ ऑनलाइन उपलब्ध) में वर्णित है।

12

मुझे सुखद आश्चर्य हुआ कि किसी ने पूछा है कि खोज इंजन के लिए एक अत्याधुनिक वर्तनी सुझाव प्रणाली कैसे बनाएं। मैं इस विषय पर एक खोज इंजन कंपनी के लिए एक वर्ष से अधिक समय से काम कर रहा हूं और मैं विषय पर सार्वजनिक डोमेन पर जानकारी इंगित कर सकता हूं।

जैसा कि पिछले पोस्ट में बताया गया था, Google (और माइक्रोसॉफ्ट और याहू!) किसी पूर्वनिर्धारित शब्दकोश का उपयोग नहीं करते हैं और न ही वे भाषाविदों की भीड़ को नियोजित करते हैं जो प्रश्नों की संभावित गलत वर्तनी पर विचार करते हैं। समस्या के पैमाने के कारण यह असंभव होगा, लेकिन यह भी स्पष्ट नहीं है कि लोग वास्तव में सही ढंग से पहचान सकते हैं कि कब और यदि कोई प्रश्न गलत वर्तनी है।

इसके बजाय एक सरल और प्रभावी सिद्धांत है जो सभी यूरोपीय भाषाओं के लिए भी मान्य है। अपने खोज लॉग पर सभी अनूठे प्रश्न प्राप्त करें, प्रश्नों के सभी जोड़ों के बीच संपादन दूरी की गणना करें, यह मानते हुए कि संदर्भ क्वेरी वह है जो उच्चतम गिनती है।

यह सरल एल्गोरिदम कई प्रकार के प्रश्नों के लिए बहुत अच्छा काम करेगा। यदि आप इसे अगले स्तर पर ले जाना चाहते हैं तो मेरा सुझाव है कि आप उस विषय पर माइक्रोसॉफ्ट रिसर्च द्वारा पेपर पढ़ें। आप इसे here

पेपर का एक महान परिचय है लेकिन इसके बाद आपको छुपे हुए मार्कोव मॉडल जैसी अवधारणाओं के साथ जानकार होने की आवश्यकता होगी।

0

यू comparisment के लिए ngram इस्तेमाल कर सकते हैं: http://en.wikipedia.org/wiki/N-gram

अजगर ngram मॉड्यूल का उपयोग करना: http://packages.python.org/ngram/index.html

import ngram 

G2 = ngram.NGram([ "iis7 configure ftp 7.5", 
        "ubunto configre 8.5", 
        "mac configure ftp"]) 

print "String", "\t", "Similarity" 
for i in G2.search("iis7 configurftp 7.5", threshold=0.1): 
    print i[1], "\t", i[0] 

यू मिलती है:

>>> 
String Similarity 
0.76 "iis7 configure ftp 7.5"  
0.24 "mac configure ftp" 
0.19 "ubunto configre 8.5" 
संबंधित मुद्दे