12

私は人名の大きなコレクションを持っています (例: "john smith")。その中の人を名前で調べたい。ただし、一部のクエリはスペルが間違っています (例: "jon smth"、"johnsm ith")。スペル修正された一致を見つける可能性のある Python バインディングを備えたスペル修正ライブラリはありますか?

私は、Whoosh と Python-aspell を認識しています。Whoosh のスペル修正は、正しいスペルのコレクションをメモリに格納するのではなく、ディスクに書き込むため、私にはあまり機能しません。これにより、アプリケーションのルックアップが遅すぎます。コードの構造上、この動作を変更するのは簡単ではないようです。また、「y」は「z」よりも「i」(「ジム・カジンスキー」->「ジム・カジンスキー」)と混同される可能性がはるかに高いにもかかわらず、Whoosh は異なる文字編集に異なる重みを付けません。 .

名前には通常空白が含まれているため、Aspell は人名ではうまく機能しません。Aspell は単語を修正の基本単位と見なします。また、私が理解しているように、Aspell は、文字編集距離モデルではなく、スペル修正の n-gram モデルを使用しています。n-gram モデルは辞書の単語には意味がありますが、名前にはうまく機能しません。「bob ruzatoxg」と「joe ruzatoxg」という人物には、珍しい姓が同じであるため、多くの珍しいトライグラムが共通しています。 . しかし、彼らは明らかに異なる人々です。

また、各クエリをコレクション内のすべてのエントリと比較することはできません。これでは時間がかかりすぎます。一部のインデックスは事前に構築する必要があります。

ありがとう!

4

1 に答える 1

6

Python で実装され、Pypi: http://pypi.python.org/pypi/Metaphone/0.4で利用できる何らかの形式のMetaphone アルゴリズムが必要なように思えます (しゃれは意図されていません) 。

LevenshteinSoundexなどの他のアルゴリズムもあります(これの信頼できる Python 実装はまだ見つかっていません) - これらの複数を使用して、何らかの形式のメトリックを計算したい場合があります (おそらく、各結果に異なる重みを付けることさえあります)。可能性のある修正の結果リストを作成します。

于 2012-12-03T19:54:27.427 に答える