17

私はゲームのチャットレスポンダーを作成しています。2つの文字列を比較して、それらが互いにほぼ等しいかどうかを確認する方法があるかどうかを知りたいです。たとえば、次のようになります。

誰かが「強度レベル?」と入力した場合 それは機能を実行します..その後、誰かが「Strレベル?」と入力した場合 同じ機能を実行しますが、誰かがタイプミスなどを行った場合に、入力しようとしている内容を自動的に検出できるようにします。たとえば、「Strengthtlevel?」などです。また、関数が呼び出されるようになります。

私がここで求めているのは単純なことですか、それとも文字列をチェックするために大きな巨大な刺激関数を作成する必要がありますか?

あなたが私の説明に困惑しているなら(私の長所の1つではありません)、これは基本的に私が求めていることです。

2つの文字列が互いに類似しているかどうかを確認するにはどうすればよいですか?

4

6 に答える 6

18

この質問と回答を参照してください:最も近い文字列の一致を取得する

いくつかのヒューリスティックとレーベンシュタイン距離アルゴリズムを使用して、2 つの文字列の類似性を計算し、それらが等しいかどうかを推測できます。

ここに画像の説明を入力

それ以外の唯一のオプションは、探しているものに似た受け入れられた単語の辞書です。

于 2012-04-09T14:02:59.073 に答える
6

レーベンシュタイン距離を使用できます。

于 2012-04-09T14:02:43.753 に答える
1

おそらく必要なのは、似たような単語やよくあるスペルミスの大きな辞書で、各単語を 1 つのエントリまたはキーに「翻訳」するために使用します。

これはカスタム ワードに役立つので、「str」を「strength」と同じキーに追加できます。

ただし、いくつかの自動化された方法を作成することもできます。つまり、単語が辞書に見つからない場合、1 文字の違い (欠落または置換) を再帰的にループし、より深いレベル、つまり 2 つの欠落文字などに再帰することができます。

于 2012-04-09T14:02:49.687 に答える
1

テキストから音素への翻訳を行うプロジェクトをいくつか見つけましたが、どれが最適かわかりません

于 2012-04-09T14:03:02.470 に答える
1

類似した単語の始まりを見つけたい場合は、ステマーを使用できます。ステマーは単語を共通の始まりに減らします。Port Stemmer ( http://tartarus.org/~martin/PorterStemmer )の場合、最もよく知られているアルゴリズムです。

上で指摘したように、レーベンシュタインは優れていますが、距離が 1 つか 2 つを超えると計算量が多くなります。

于 2012-04-09T14:14:31.163 に答える