近似文字列マッチングのためのコードを書いたところです。JVMで実行されているより成熟した実装に対して、ナイーブなアルゴリズムのベンチマークを行いたいと思います。助言がありますか?
2 に答える
同様の問題について、このサイトの他の場所でこれらの回答を見つけました。
Commons Langには、レーベンシュタイン距離の実装があります。
http://commons.apache.org/lang/api-release/org/apache/commons/lang/StringUtils.htmlCommons Codecには、soundexとmetaphoneが実装されています。
http://commons.apache.org/codec/api-release/org/apache/commons/codec/language/Soundex.html
http://commons.apache.org/codec/api-release/org/apache/commons /codec/language/Metaphone.html
(ソース)
Lucene(http://lucene.apache.org/)もレーベンシュタイン編集距離を実装しています。
(ソース:zarawesome)
たまたま、私は何年も前にこのホイールを再発明しました-メインフレームのFORTRANプログラムで:)
私がインターネット上の他の人々に私のアルゴリズムについて誇らしげに話したとき、彼らは笑って、この分野の2人(4人?)の有名人を指さしました。
これらは、類似した文字列の巨大なシーケンスを比較するためのアルゴリズムです。メモリ要件は約ですm + n
。ここで、mとnは文字列のサイズであり、実行時間は約m * n
です。
Gunslinger47は、レーベンシュタイン、サウンデックス、メタフォンについて言及しています。レーベンシュタインは、文字列の距離を計算する強力な手段でもありますが、「通常の」テキストに適しています。SoundexとMetaphoneは、人間が話すときに文字列の音をエンコードすることを目的とした短い文字列を計算します...約3音節後に無効になります。実際には、ゲノムの文字列などではなく、人間の言語の単語を対象としています。
編集
おっと、あなたが引用した記事の下部に私の4つのビッグネームが見つかりました。だからあなたはすでにそれらに気づいています。それらの名前を検索すると、「Java」で実装が見つかるはずだと思います。これが私が最初に見つけたものです。