2012-12-03 21 views
10

人名が大量に集まっています(「john smith」など)。私はその中で名前で人を探したい。ただし、クエリの一部にスペルミスがあります(「jon smth」、「johnsm iith」など)。私のためにスペルを修正したマッチを見つけるかもしれないPythonバインディングを持つスペル修正ライブラリがありますか?人名のスペルを修正する(Python)

私はWhooshとPython-aspellを知っています。 Whooshのスペル訂正は、正しいスペルのコレクションをメモリに保存するのではなく、ディスクに書き込むため、私にとってはうまく機能しません。それは私のアプリケーションでは検索が遅すぎます。コードがどのように構造化されているので、この動作を変更することは自明ではないようです。また、「y」は「i」(「jim kazinsky」 - >「jim kazinsky」)と「z」よりもはるかに混同される可能性があるにもかかわらず、 。

Aspellは名前には通常空白が含まれているため、Aspellは人名にはうまくいきません。Aspellは単語を訂正の基本単位とみなします。また、私が理解しているように、Aspellは、文字編集距離モデルではなく、スペル修正のn-gramモデルを使用しています。 n-gramモデルは辞書の単語には意味がありますが、名前のためにはうまくいきません。人々の "bob ruzatoxg"や "joe ruzatoxg"にはまれなトリグラムがたくさんあります。 。しかし、彼らははっきりとは異なる人々です。

私は、各クエリをコレクション内のすべてのエントリと比較するだけでは意味がありません - それは遅すぎるでしょう。いくつかのインデックスは事前に構築する必要があります。

ありがとうございます!

答えて

6

Metaphone algorithmの形式が必要です(Pythonで実装され、Pypi:http://pypi.python.org/pypi/Metaphone/0.4で利用可能です)。

他のアルゴリズムは、このようなLevenshteinSoundexとして(まだこの信頼性の高いPython実装を発見していない)、あまりにもあります - あなたはこれらの複数を使用して、メトリックのいくつかのフォームを計算する場合があります(おそらく異なる重みを与えますそれぞれの結果に)是正措置の結果リストを提示する。

+0

Metaphoneライブラリは役に立ちました。ありがとうございました。もし私が自分のスペルチェッカーの名前を書いてしまうと(私はまだ誰かが私が使っているものを書いてくれたことを願っています)、おそらくメトリックの一部のメタフォンマッチングを使うでしょう。 – Jeff

+0

Levenshteinライブラリは、2つの文字列間のペアワイズ・マッチングのためにもっとよく見えます。私はそれを使うことはできないと思っています。なぜなら、各クエリをコレクション内のすべての名前文字列と比較する必要があるからです。しかし、Metaphoneライブラリでは、クエリを処理する前に、コレクション内の名前の表音表現の辞書を構築することができます。 – Jeff

+2

[fuzzywuzzy](http://seatgeek.com/blog/dev/fuzzywuzzy-fuzzy-string-matching-in-python)のオプションがあります。 – Matthias

関連する問題