5

インポートしたファイルを他の言語にローカライズできるシステムに取り組んでいます。

これは主に、MVC3、EntityFramework、LINQなどのコツをつかむためのプライベートプロジェクトです。したがって、私は最終結果を盛り上げるためにいくつかのクレイジーなことをするのが好きです。それらの1つは、類似した文字列の認識です。

次の文字列のリストがあるとします。これは、過去に使用したゲームから借用したものです。

  • メガベス:ホーリーローラーユニフォーム-頭、胴体、脚が含まれています
  • メガベス:ホーリーローラーユニフォームヘッド
  • メガベス:ホーリーローラーユニフォームレッグ
  • メガベス:ホーリーローラーユニフォームトルソ
  • Megabeth:PAX East 2012ユニフォーム-頭、胴体、脚が含まれています
  • メガベス:PAXEast2012ユニフォームヘッド
  • メガベス:PAXEast2012ユニフォームレッグ
  • メガベス:PAXEast2012ユニフォームトルソ

ご覧のとおり、ユーザーが最初の4つの文字列を翻訳すると、次の4つは多くの類似点を共有します。この場合は、次のようになります。

  • メガベス
  • ユニフォーム
  • 頭、胴体、脚が含まれています
  • 胴体

最初の4つの文字列は実際にすでに翻訳されていると考えてください。ユーザーがリストから5番目の文字列を選択すると、「類似」のサブヘッダーの下にある最初の文字列(および場合によっては他の文字列)をユーザーに表示するためにどのようなアルゴリズムまたは手法を使用できますか文字列」?

編集-レーベンシュタイン距離についてのちょっとしたコメント:私は現在、データベースで10kの文字列をターゲットにしています。レーベンシュタイン距離は文字列ごとに文字列を比較するため、この場合は10k x(10k -1)の可能な組み合わせです。実行可能な方法でこれにどのようにアプローチしますか?この特定のアルゴリズムよりも優れた解決策はありますか?

4

2 に答える 2

5

レーベンシュタイン距離を調べることができます。特定のしきい値を下回るものは、類似していると見なされます。同一の 2 つの文字列の距離はゼロになります。

Rosetta Codeには、他の言語の中でも特に C# 実装があります。

于 2012-10-22T20:20:26.373 に答える
0

これは、データのサイズと語彙の豊富さによって異なります。最初の考えは次のとおりです。単語から文字列へのマップを作成し、次に単語ペアから文字列への別のマップを作成します。データが文字列トリプレットから文字列への巨大なマップでない場合は、おそらく作成します。単一の文字列を指すマッピングを削除します(これにより、トリプレットマッピングの数が大幅に減少します)。作成に時間がかかる場合は、結果の辞書をディスクまたはデータベースに保存します。

文字列が与えられると、それを単語、単語のペア、トリプレットにすばやく分割し、それに関連するすべての文字列を検索できるはずです。トリプレットマッチングと4ワードマッチングを重視して遊ぶ必要があります。つまり、「私は老人です」は「老人がニンジンを食べた」または「男が老犬を矢で殺した」に近いです(トリプレットマッチのような音がより重要です)。

更新:これがMicrosoft SQL Serverデータベースの場合、全文検索機能で遊ぶことができます。私はそれを試したことはありません。Luceneもご覧ください。

于 2012-10-22T20:25:40.193 に答える