2012-10-12 15 views
10

Google ने search queries में Google की तरह "क्या आपका मतलब है:" को कैसे कार्यान्वित कर सकते हैं?रेल में "क्या आपका मतलब" कार्यक्षमता को एकीकृत करने के लिए कैसे?

पीएस: मैं अपने उत्पाद में स्फिंक्स का उपयोग कर रहा हूं। क्या आप सुझाव दे सकते हैं कि मैं इसे कैसे कार्यान्वित कर सकता हूं। कुछ अन्य खोज इंजनों के लिए कोई गाइड या सुझाव जिनके पास इस कार्यक्षमता का सबसे अधिक स्वागत है। मैं rails2.3.8 उपयोग कर रहा हूँ, कि अगर मदद करता है

एक समाधान हो सकता है:

में जाना जाता है "कीवर्ड" या "वाक्यांश" का एक शब्दकोश है, और खोज कार्रवाई में कुछ भी नहीं तो पाया जाता है चलाने उस शब्दकोश में एक माध्यमिक क्वेरी। जब भी कोई खोज योग्य प्रविष्टि बनाई जाती है, तो उस शब्दकोश को अपडेट करें, एक ब्लॉग पोस्ट या उपयोगकर्ता नाम।

  • क्वेरी = "supreman"

  • शब्दकोश = [ "सुपरमैन", "बैटमैन", "हनुमान" ...] (DB तालिका में)

  • खोज (क्वेरी)

  • अगर कोई परिणाम नहीं, तो इस शब्दकोश में

खोज (जहां "कीवर्ड" क्वेरी या "वाक्यांश" की तरह क्वेरी) => "सुपरमैन"

स्फिंक्स या सोलर दस्तावेज़ में जांचें। उनके पास इस "पसंद" क्वेरी का बेहतर कार्यान्वयन हो सकता है जो% मिलान देता है।

  • डिस्प्ले -> क्या आपका मतलब "सुपरमैन" था?

लेकिन बिंदु यह कैसे कुशल बनाने के लिए है?

उत्तर

1

मुझे लगता है कि आप एक स्ट्रिंग मैच एल्गोरिदम की तलाश में हैं।

मैं mislav's gist जब प्रारंभ थोड़ा गलत वर्तनी था त्रुटियों को बढ़ाने के लिए इस्तेमाल किया याद है। यह एक अच्छा पढ़ा जा सकता है।

इसके अलावा, लेख वह पता चलता है में से कुछ पर एक नज़र डालें:

+0

वहाँ किसी भी इनबिल्ट समाधान या पूर्ण पाठ खोज इंजन के लिए कुछ मणि ऐड-ऑन नहीं है? –

+0

अगर मुझे इसे कार्यान्वित करना पड़ा, तो मैं ['pg_trgm'] (http://www.postgresql.org/docs/9.2/static/pgtrgm.html) देखकर शुरू करूंगा, क्योंकि मेरे अधिकांश एप्लिकेशन पहले ही उपयोग कर रहे हैं PostgreSQL। आखिरी बार जब मैंने चेक किया, तो स्फिंक्स को इस तरह की अस्पष्ट खोज नहीं है, सिवाय इसके कि स्टेमिंग द्वारा प्रदान किया गया है। – willglynn

+0

मैं MySQL का उपयोग कर रहा हूं :( –

5

Damerau-Levenshtein दूरी एल्गोरिथ्म पर एक नज़र डालें। यह दो तारों के बीच "दूरी" की गणना करता है और यह निर्धारित करता है कि एक स्ट्रिंग को दूसरे में बदलने के लिए कितने कदम उठाए जाते हैं। दो तारों के करीब कम कदम हैं।

This आलेख एल्गोरिदम को एक MySQL संग्रहीत फ़ंक्शन के रूप में लागू करता है।

एल्गोरिदम LIKE या SOUNDEX से बहुत बेहतर है।

मेरा मानना ​​है कि Google एल्गोरिदम की बजाय भीड़ के स्रोत का उपयोग करता है। यानी यदि उपयोगकर्ता एबीसीडी में टाइप करता है, तो बैक बटन पर क्लिक करता है और फिर तुरंत एबीडी की खोज करता है तो यह दो खोज शब्दों के बीच एक रिश्ता स्थापित करता है क्योंकि उपयोगकर्ता परिणाम से खुश नहीं था। एक बार जब आपके पास बहुत बड़ी समुदाय खोज हो तो पैटर्न दिखाई देता है।

+0

आलेख लिंक 404 – chanchal118

+0

@ chanchal118 निश्चित –

2

आपको वास्तविक सिद्धांत पर एक नज़र डालना चाहिए कि Google इस तरह कुछ कैसे लागू करता है: How to Write a Spelling Corrector

हालांकि यह आलेख पायथन में लिखा गया है, लेख के निचले हिस्से में अन्य भाषाओं में कार्यान्वयन के लिंक हैं। यहां एक Ruby implementation है।

1

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

1

यह मेरे लिए काम कर रहा है:

SELECT * FROM table_name WHERE soundex(field_name) LIKE CONCAT('%', soundex('searching_element'), '%') 
+0

वैसे भी आप खोज शब्द के आधार पर मिलान करने वाले उदाहरणों के उदाहरण प्रदान कर सकते हैं? ट्रांसपोज़ किए गए वर्णों से मेल खाने वाली चीज़ों की तलाश करना संभवतः ईजी को फेंकने की संभावना से अधिक होगा : एएलपीजी के बजाय एएलजीपी की खोज करते समय एएलपीजी और एएलएफजी उपलब्ध थे। – fyrye

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