可能性のある複製:
「もしかして」をどのように実装しますか?
Googleの「もしかして」と同様の機能が必要なアプリケーションを書いています。彼らの検索エンジンで使用される機能:
そのようなものに利用できるソースコードはありますか、または私が自分のものを構築するのに役立つ記事をどこで見つけることができますか?
私は1年半前にGoogleエンジニアによるセミナーに参加しました。そこで彼らはこれに対する彼らのアプローチについて話しました。プレゼンターは、彼らのアルゴリズム(の少なくとも一部)はほとんど知性を持たないと言っていました。むしろ、彼らがアクセスできる膨大な量のデータを利用します。彼らは、誰かが「ブリタニースピアーズ」を検索し、何もクリックせずに「ブリトニースピアーズ」をもう一度検索して何かをクリックした場合、彼らが探していたものについてかなり推測できると判断し、未来。
免責事項:これは、アルゴリズムの一部であった可能性があります
Pythonには difflib
というモジュールがあります。 _get_close_matches
_と呼ばれる機能を提供します。 Pythonドキュメントから:
get_close_matches(Word, possibilities[, n][, cutoff])
「十分に良い」一致のリストを返します。 Wordは、一致が必要なシーケンス(通常は文字列)であり、possibilitiesは、照合するシーケンスのリストですWord(通常、文字列のリスト)。
オプションの引数n(デフォルトの_
3
_)は、返される近似一致の最大数です。 nは_0
_より大きくなければなりません。オプションの引数cutoff(デフォルトの_
0.6
_)は、[0、1]の範囲の浮動小数点数です。少なくともWordと同様のスコアを獲得できない可能性は無視されます。可能性の中で最良の(以下n)一致がリストに返され、類似性スコアでソートされます。
_ >>> get_close_matches('appel', ['ape', 'Apple', 'Peach', 'puppy'])
['Apple', 'ape']
>>> import keyword
>>> get_close_matches('wheel', keyword.kwlist)
['while']
>>> get_close_matches('Apple', keyword.kwlist)
[]
>>> get_close_matches('accept', keyword.kwlist)
['except']
_
このライブラリは役に立ちますか?
同様の機能を提供する http://developer.yahoo.com/search/web/V1/spellingSuggestion.html を使用できます。
それがあなたの目的を果たしているかどうかはわかりませんが、小さなアプリケーションでは、辞書付きの文字列編集距離アルゴリズムで十分です。
他の多くの検索ライブラリと同様に、この機能を提供するXapianのソースコードをチェックアウトできます。 http://xapian.org/
google bombing に関するこの記事を見てみましょう。これは、以前に入力された結果に基づいて回答を提案するだけであることを示しています。
Uは比較にngramを使用できます: http://en.wikipedia.org/wiki/N-gram
python ngram module: 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[0], "\t", i[1]
U取得:
>>>
String Similarity
"iis7 configure ftp 7.5" 0.76
"mac configure ftp 0.24"
"ubunto configre 8.5" 0.19
このトピックの素晴らしい章は、公開されている Introduction to Information Retrieval にあります。
私の知る限り、「もしかして?」機能はスペルをチェックしません。 googleによって解析されたコンテンツに基づく別のクエリのみを提供します。
Levenshtein-Automata を見てください