5

これは率直な質問ではないことは承知していますので、その範囲についてさらに情報を提供する必要がある場合はお知らせください。ほぼ同じ問題に対処する質問がたくさんあります (それらはここにリンクされています) が、少なくとも私が知る限り、同じ種類の範囲と目的を持つまったく同じものは決してありません。

環境:

  • アーティスト名と曲名の ID3 タグを含む MP3 ファイルがあります。
  • アーティストと曲の2つのテーブルがあります
  • ID3 タグが少しずれている可能性があります (例: Mikaell Jacksonne)。
  • ASP.NET + C# と MSSQL データベースを使用しています

MP3 をデータベースと同期する必要があります。意味:

  1. ユーザーがスクリプトを起動する
  2. スクリプトはすべての MP3 をブラウズします。
  3. スクリプトは、「'Mikaell Jacksonne' 'Michael Jackson' YES/NO です」と言っています。
  4. ユーザーが選択すると、最初からやり直します

システムが検出できるものの例:

データベースで...

SONGS = {"This is a great song title", "This is a song title"}
ARTISTS = {"Michael Jackson"}

出力...

"This is a grt song title" did you mean "This is a great song title" ?
"This is song title" did you mean "This is a song title" ?
"This si a song title"  did you mean "This is a song title" ?
"This si song a title"  did you mean "This is a song title" ?
"Jackson, Michael" did you mean "Michael Jackson" ?
"JacksonMichael" did you mean "Michael Jackson" ?
"Michael Jacksno" did you mean "Michael Jackson" ?

この/how-do-you-implement-a-did-you-meanからいくつかのドキュメントを読みましたが、辞書全体をチェックしたくないので、これはまさに私が必要としているものではありません。また、データベースに既にあるものに大きく依存しているため、Web サービスを実際に使用することもできません。可能であれば、距離やその他の複雑なことを扱うことも避けたい.


Google api (または同様のもの) を使用してこれを行うことができます。つまり、スクリプトはスペル チェックを試行し、データベースでテストしますが、データベースが奇妙なもので非常に具体的になってしまう可能性があるため、より良い解決策があると思います。曲やアーティスト、スペル チェックを役に立たなくします。

この投稿で説明されているようなことを試して、 Soundex for c#を使用することもできます。

単語ではなく名前と「タイトル」を使用するため、通常のスペル チェッカーを使用しても機能しません。


だから私の質問は、これを行う比較的簡単な方法はありますか?もしそうなら、それは何ですか?

どんな種類の助けもいただければ幸いです。

ありがとう!

4

4 に答える 4

3

あなたが望むのは類似性要因です。基本的に、入力 (たとえば、"Michael Jackson") を期待値 ("Michael Jackson") と比較します。期待値の 1 つに対して非常に高い類似性値をスコア付けした場合は、ユーザーに尋ねることができます。

これを行う 1 つの方法は、期待される値を完全にパックされたハッシュテーブルにハッシュすることです。適切なハッシュ アルゴリズムを取得すると (そして、これはトリッキーなビットです)、各入力は最も近い期待値にハッシュされます。最も近い期待値が見つかったら、入力とその期待値に対して類似性評価を実行できます。特定のしきい値を超えている場合は、ユーザーに尋ねてください。

于 2009-07-07T17:43:22.883 に答える
1

かなり単純ですが、比較的不正確なシステムは、文字列の文字を比較し、ユーザーの文字列で異なる/欠落している/追加されている文字の数を測定することです。文字数が十分に少ない場合(キー距離[ルックアップテーブル]などに基づいて差に重みを付けることができます)、特定の文字列を意味するかどうかをユーザーに確認します

于 2009-07-07T17:47:04.157 に答える
1

これは重要なタスクです。これに対処するアルゴリズムの詳細については、ウィキペディアを参照してください。あなたはすでにsoundexを見つけましたが、ここであなたが探している他の変換があります.

于 2009-07-07T18:02:37.947 に答える
1

これは、スペル チェッカーの作成と非常に似ているように思えますが、三分探索木を使用するのが最適です。リンクは例としてJavaを使用していますが、データ構造は重要な部分です。データ構造は、McWafflestix によって言及されたプロパティを持つハッシュのように動作します。

于 2009-07-07T18:31:58.497 に答える