5

文字列の編集距離をコレクションに対して計算して、最も近いものを見つけることを試みています。私の現在の問題はコレクションが非常に大きく(約25000アイテム)、セットを同じ長さの文字列に絞り込む必要がありましたが、それでもそれは数千文字列にしか絞られず、依然として非常に遅いです。類似した文字列をすばやく検索できるデータ構造があるのでしょうか、この問題に対処する別の方法がありますか?すぐに文字列をJavaのコレクションと比較します

+0

どうやってやっていますか?いくつかのコードを表示できますか? –

+3

「類似」を定義します。 –

+0

同様に、「exanple」や「example」や「weird」や「wierd」などの一般的なスペルミスである単語を比較することを意味します。 – Lezan

答えて

8

BK-treeのようなサウンドがあなたが望むかもしれません。それらについて議論している記事があります:http://blog.notdot.net/2007/4/Damn-Cool-Algorithms-Part-1-BK-Treesquick Googleでは、いくつかのJava実装が生成されます。

+0

ありがとう私はこれを見て、あなたにそれがどうなるかを教えてくれます、ありがとう! – Lezan

+0

それはそれをした、検索の別の実装が必要でしたが、それは完璧でした!ありがとうございました!! – Lezan

2

「類似」の条件で全体の順序が定義されている場合は、Comparatorを定義し、TreeSetを使用して最も近い一致を見つけることができます(天井と床のメソッドを使用するなど)。

6

Levenshtein Automataは、指定された単語から与えられたLevenshtein距離内にあるように大きな辞書から単語のセットを素早く選択することができます。

参照:Schulz K、Mihov S.(2002)Fast String Correction with Levenshtein-Automata

関連する問題