سؤال

التكرار المحتمل:
كيف تقصد Google "هل تقصد؟" خوارزمية العمل؟

لنفترض أن لديك نظام بحث موجود بالفعل في موقع الويب الخاص بك.كيف يمكنك تنفيذ "هل تقصد:<spell_checked_word>"كما يفعل Google في البعض استعلامات البحث?

هل كانت مفيدة؟

المحلول

في الواقع، ما تفعله Google ليس تافهًا إلى حد كبير، كما أنه غير بديهي في البداية.إنهم لا يفعلون أي شيء مثل التحقق من القاموس، بل يستخدمون الإحصائيات لتحديد الاستعلامات "المشابهة" التي أعادت نتائج أكثر من استعلامك، والخوارزمية الدقيقة غير معروفة بالطبع.

هناك مشاكل فرعية مختلفة يجب حلها هنا، كأساس أساسي لجميع إحصاءات معالجة اللغات الطبيعية ذات الصلة، هناك كتاب يجب أن يكون لديك: مؤسسة معالجة اللغات الطبيعية الإحصائية.

بشكل ملموس لحل مشكلة تشابه الكلمات/الاستعلام، حصلت على نتائج جيدة في الاستخدام تحرير المسافة, ، وهو مقياس رياضي لتشابه السلسلة والذي يعمل بشكل جيد بشكل مدهش.اعتدت على استخدام Levenshtein ولكن قد يكون من المفيد النظر في الآخرين.

Soundex - في تجربتي - هو حماقة.

في الواقع، يعد تخزين قاموس كبير من الكلمات التي بها أخطاء إملائية والبحث فيها بشكل فعال واسترجاعها في الثانية أمرًا غير تافه مرة أخرى، وأفضل رهان لك هو الاستفادة من محركات فهرسة النص الكامل واسترجاعه (على سبيل المثال.ليست قاعدة بياناتك)، منها لوسين يعد حاليًا واحدًا من أفضل البرامج ويتم نقله عن طريق الصدفة إلى العديد من المنصات.

نصائح أخرى

وقد أوضح الدكتور نورفيج من جوجل كيفية عمله؛حتى أنه يقدم تطبيق Python ذو 20 سطرًا:

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

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

يناقش الدكتور نورفيج أيضًا عبارة "هل تقصد" في هذا المقال هذا الحديث الممتاز.الدكتور نورفيج هو رئيس قسم الأبحاث في Google - عندما سُئل عن كيفية تنفيذ عبارة "هل تقصد"، كانت إجابته هي موثوق.

لذلك، يتم التدقيق الإملائي، باستخدام قاموس ديناميكي يتم إنشاؤه من عمليات بحث أخرى أو حتى من عبارات الإنترنت الفعلية وما شابه.ولكن هذا لا يزال التدقيق الإملائي.

SOUNDEX والتخمينات الأخرى لا يتم إلقاء نظرة عليها أيها الناس!

يفحص هذا مقالة على ويكيبيديا عن مسافة ليفنشتاين.تأكد من إلقاء نظرة فاحصة على التحسينات المحتملة.

لقد فوجئت بسرور عندما سألني أحد الأشخاص عن كيفية إنشاء نظام متطور لاقتراحات التدقيق الإملائي لمحركات البحث.لقد عملت في هذا الموضوع منذ أكثر من عام لدى إحدى شركات محركات البحث ويمكنني الإشارة إلى معلومات حول المجال العام حول هذا الموضوع.

كما ذكرنا في منشور سابق، لا يستخدم Google (وMicrosoft وYahoo!) أي قاموس محدد مسبقًا ولا يوظفون جحافل من اللغويين الذين يفكرون في الأخطاء الإملائية المحتملة في الاستعلامات.قد يكون ذلك مستحيلًا نظرًا لحجم المشكلة، ولكن أيضًا لأنه ليس من الواضح ما إذا كان بإمكان الأشخاص تحديد متى وما إذا كان هناك خطأ إملائي في الاستعلام أم لا.

وبدلاً من ذلك، هناك مبدأ بسيط وفعال إلى حد ما، وهو صالح أيضًا لجميع اللغات الأوروبية.احصل على جميع الاستعلامات الفريدة في سجلات البحث الخاصة بك، واحسب مسافة التحرير بين جميع أزواج الاستعلامات، على افتراض أن الاستعلام المرجعي هو الاستعلام الذي يحتوي على أعلى عدد.

ستعمل هذه الخوارزمية البسيطة بشكل رائع مع العديد من أنواع الاستعلامات.إذا كنت تريد الانتقال إلى المستوى التالي، فأقترح عليك قراءة الورقة البحثية التي أعدتها Microsoft Research حول هذا الموضوع.يمكن ان تجدها هنا

تحتوي الورقة على مقدمة رائعة ولكن بعد ذلك ستحتاج إلى أن تكون على دراية بمفاهيم مثل نموذج ماركوف المخفي.

أود أن أقترح النظر في سونديكس للعثور على كلمات مماثلة في قاعدة البيانات الخاصة بك.

يمكنك أيضًا الوصول إلى قاموس Google الخاص باستخدام طلب اقتراح التدقيق الإملائي لـ Google API.

قد ترغب في إلقاء نظرة على كتاب بيتر نورفيج "كيفية كتابة مصحح إملائي" شرط.

أعتقد أن Google يسجل جميع الاستعلامات ويحدد متى يقوم شخص ما بإجراء تصحيح إملائي.قد يتم بعد ذلك اقتراح هذا التصحيح عندما يقدم الآخرون نفس الاستعلام الأول.سيعمل هذا مع أي لغة، في الواقع أي سلسلة من أي أحرف.

أعتقد أن هذا يعتمد على حجم موقع الويب الخاص بك.على شبكتنا الداخلية المحلية التي يستخدمها حوالي 500 موظف، ألقي نظرة ببساطة على عبارات البحث التي لم ترجع أي نتائج وأدخل عبارة البحث تلك مع عبارة البحث الجديدة المقترحة في جدول SQL.

أقوم بالاتصال بهذا الجدول إذا لم يتم إرجاع أي نتائج بحث، ومع ذلك، فإن هذا لا يعمل إلا إذا كان الموقع صغيرًا نسبيًا وأقوم بذلك فقط مع عبارات البحث الأكثر شيوعًا.

قد ترغب أيضًا في إلقاء نظرة على إجابتي على سؤال مماثل:

إذا كانت لديك ترجمات خاصة بالصناعة، فمن المحتمل أنك ستحتاج إلى قاموس المرادفات.على سبيل المثال، عملت في صناعة المجوهرات وكان هناك اختصار في الأوصاف لدينا مثل kt - قيراط، الثالثة - الجولة، cwt - وزن القيراط ...يحتوي Endeca (محرك البحث في تلك الوظيفة) على قاموس المرادفات الذي سيتم ترجمته من الأخطاء الإملائية الشائعة، ولكنه يتطلب تدخلًا يدويًا.

أفعل ذلك مع لوسينمدقق املائي.

يعد Soundex جيدًا للمطابقات الصوتية، ولكنه يعمل بشكل أفضل مع أسماء الأشخاص (تم تطويره في الأصل لبيانات التعداد السكاني)

تحقق أيضًا من فهرسة النص الكامل، حيث يختلف بناء الجملة عن منطق Google، ولكنه سريع جدًا ويمكنه التعامل مع عناصر لغوية مماثلة.

Soundex و "Porter Steming" (Soundex تافه، لست متأكدًا من وجود Porter Steming).

هناك شيء يسمى aspell قد يساعد:http://blog.evanweaver.com/files/doc/fauna/raspell/classes/Aspell.html

هناك جوهرة ياقوتية لها، لكني لا أعرف كيف أتحدث إليها من بايثونhttp://blog.evanweaver.com/files/doc/fauna/raspell/files/README.html

وهنا اقتباس من تنفيذ روبي

الاستخدام

يتيح لك Aspell التحقق من الكلمات واقتراح التصحيحات.على سبيل المثال:

  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

هذه المخرجات:

التصحيح المحتمل للقلب:تصحيح القلب المحتمل لويل:سوف

إن تنفيذ التصحيح الإملائي لمحركات البحث بطريقة فعالة ليس بالأمر الهين (لا يمكنك فقط حساب مسافة التحرير/التعديل لكل كلمة ممكنة).تم وصف الحل بناءً على فهارس k-gram في مقدمة في استرجاع المعلومات (النص الكامل متاح على الإنترنت).

يمكنك استخدام ngram للمقارنة: http://en.wikipedia.org/wiki/N-gram

باستخدام وحدة بايثون نجرام: 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"   

لماذا لا تستخدم جوجل هل تقصد في التعليمات البرمجية الخاصة بك. لمعرفة كيف ترى هناhttp://narenonit.blogspot.com/2012/08/trick-for-using-googles-did-you-mean.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top