2011-04-17 4 views
6

私は文字列の類似性の問題、すなわち文字列と知識ベースに対してk-最近傍点を利用しようとしています。私は与えられた文字列に似たk個の文字列を出力したいと思います。このk-nearest neighbor lookupを効率的に行うためにkd-treesを利用する方法を説明するチュートリアルはありますか?文字列の長さは20文字を超えてはなりません。文字列の類似性を判断するためにkdツリーを使用するにはどうすればよいですか?

+0

2つの文字列の間の類似性のメトリックは? [scipy.spatial.cKDtree](http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.cKDTree.html)は、高速かつ安定しており、20dには適していますが、Lpメトリックだけです。 Levenshteinトランスデューサの場合は – denis

答えて

7

おそらく、私が1年ほど前に読んだ最もホットなブログ投稿の1つ:Levenstein Automata。その記事を見てください。アルゴリズムの説明だけでなく、それに続くコードも提供します。技術的にはkdツリーではありませんが、現実世界で遭遇する文字列照合アルゴリズムや辞書訂正アルゴリズムにはかなり関連しています。

また、BK-treesについての別のブログ記事があります。これは、文字列の誤った一致や誤字がある文字列検索の方がはるかに優れています。ここにはBK-treeのソースコードを含む別のリソースがあります(これは正確性や適切な実装を検証できません)。

+0

+1。 –

+0

Levenshtein Automataは印象的ですが、それを実装すると、あらかじめ計算されたバージョンが距離が大きくなるとすぐに(ノードの点で)爆発するとしか言えません。実際には、Trieで検索するのはすごく速いですが、オートマトンは4以上の距離で本当に大きくなるようになり始めます。 –

+0

@Matthieu M.代わりに何をお勧めしますか? – wheaties

関連する問題