2009-05-20 11 views
4

2つのcsクラスを終了した後、私はJavaで個人用プロジェクトの作業を開始しました。私は音楽コレクションを見て、ファイル名とメタタグを見て 'Composer'タグを設定しようとするプログラムを書いています。私はこれらを単純なテキストファイルとして作成した作曲家リストと比較しています。私の質問は次のとおりです。コンポーザー名の比較、または2つの文字列間の「十分に近い」一致を見つける方法はありますか?

2つの文字列を比較して最もよく一致するソートを探すのに良い方法はありますか? Exammpleの場合、私の場合、「Pulenc - Gloria in excelsis Deo.flac」というファイルがあるとします。私の作曲家リストには「プーランク、フランシス」があります。私は 'Pulenc'を読むことができるようにしたいと思うし、 'Poulenc'と非常に近いので、作曲者のタグを正しく設定できるようにしたい。友人は私がCosine Distance(これまでに聞いたことがない)とLevenshtein Distanceを使って調べることを提案しました。これらのどちらかが良いアプローチですか、それともうまくいくかもしれない他の方法がありますか?

答えて

5

Levenshtein Distanceはまさにあなたが必要としているようです。 Cosine Distanceは長いテキストを扱うように見え、Soundexのようなphonetic algorithmsはおそらく英語の発音規則を使って発音することを意図していない名前のために悪い結果をもたらすでしょう。

0

Levenshtein distanceあなたのシステムに多くの作曲家がいる場合、それはひどくうまくいくかもしれませんが、妥当な考えです。 Soundex(またはMetaphone、またはNYSIIS)とは異なり、編集距離アルゴリズムを使用すると、誤ったスペルのコンポーザー名をシステム内の他のすべてのコンポーザーと比較することができます。存在する数に応じて、これには時間がかかることがあります。

(時期尚早の)最適化として、名前が正しい文字で始まる作曲家のためにLevenshtein距離を計算するだけの価値があります。

0

Peter Norvigは優れた作品である"How to Write a Spelling Corrector"を作成しました。これは役に立つと思われ、特定のニーズに合わせて調整することができます。ところで

0

私はあなたのケースでDamerau–Levenshtein distanc eが正常に動作すべきだと思います。より多くのデータがある場合は、それを使用してください。良好なアルゴリズムがない場合、大量のデータを補うことができます。

関連する問題