2つの単純な文字列を比較する簡単で軽量なアルゴリズムを探しています。我々は、これら二つの文字列取る場合たとえば、単純な単語差分アルゴリズム
:
- を「速い茶色のキツネは、のろまなイヌに飛びかかった」
- 「クレイジー犬オーバーplick茶色のキツネのtumps」
2番目の単語の2文字目の最初の文字が異なっていることを私に知らせてください。
今のところ私は単語を比較する非常に簡単なアルゴリズムを持っています:
/// <summary>
/// Make a diff between two strings and returns words indices
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
public static List<int> Diff(string a, string b)
{
List<int> indices = new List<int>();
string[] asplit = a.Split(' ');
string[] bsplit = b.Split(' ');
for (int i = 0; i < asplit.Length; i++)
{
if (bsplit.Length > i)
{
if (asplit[i].CompareTo(bsplit[i]) != 0)
{
indices.Add(i);
}
}
}
return indices;
}
これは、空白文字の区切りを使ってどの単語が異なるか教えてくれます。
複雑なアルゴリズムの実装や既存のライブラリの使用について、ここでは多くのトピックを読んでいます。
しかし、私は.NETコンパクトフレームワーク(WP7)で再トレーニングしていますが、2つのファイルまたは2つのテキストを比較できるものはありません。単語の比較が必要です。
適合するライブラリまたはアルゴリズムはありますか? ありがとうございました。
文の途中に単語が挿入されていて、それでその単語が歪んだ場合はどうなりますか?その後のすべての単語が違うと報告すべきか? –
この問題を解決する標準的な方法は、最長共通部分列アルゴリズムを実装することです。これはかなり簡単なアルゴリズムです。私はここにJScriptの実装があります:http://blogs.msdn.com/b/ericlippert/archive/2004/07/21/189974.aspxをC#に変換することは、練習問題として残されています。 –
@James Michael Hare:「私の小さなポニー」と「私の甘い小さなポニー」があるとしましょう。私はあまりに単純なアルゴリズムがこれに失敗すると思います。 – Valryon