質問
いて計測する必要がある物理的距離の場所名として文字列です。以来、時の名の記述はちょっと違う方法を探していた私には、図書室なった測定の差異およびその組合わせる度合いを測るための緯度-経度の選択が正しい。優先言語:JavaやPHPにしました。
ご意見募集
解決
レーベンシュタイン距離のを見てください。これは、異なる2つの文字列が互いにどのように測定する方法です。
うまくいけば、私が正しくあなたの質問を理解し、 「緯度経度」と同じ文の「距離」を使用して混乱を招くかもしれない!
他のヒント
ができる(pythonやtclのバインディング), libdistance 皆されるようにすることにより、応用距離のメトリクスに文字列を/データです。
メトリクスを含
- 咲く
- damerau
- ユークリッド
- ハミング
- jaccard
- levenshtein
- マンハッタン
- ミンコフスキ
- needleman_wunsch
あなたは少しmisspelldの名前を見つけるために、音声アルゴリズムを使用して、いくつかのまともな結果を得る可能性があります。
あなたはより多くの機械的な編集距離を使用する場合は、また、あなたはおそらく、キーボードの形状(すなわち、物理的に近いキーがものをオフはるかにより交換する「安い」です)を占めて重み関数を使用して、より良い結果が表示されます。それはところで特許取得済みの方法ですので、あまりにも人気となり、何かを書くことがないように注意してください。)
私は、Javaコードにレーベンシュタイン距離を計算するために書いたC#のコードの一部を翻訳するために自由を取りました。それは大きなギザギザの配列の代わりに交互に2つだけの単一次元アレイを使用する:
public static int getDifference(String a, String b)
{
// Minimize the amount of storage needed:
if (a.length() > b.length())
{
// Swap:
String x = a;
a = b;
b = x;
}
// Store only two rows of the matrix, instead of a big one
int[] mat1 = new int[a.length() + 1];
int[] mat2 = new int[a.length() + 1];
int i;
int j;
for (i = 1; i <= a.length(); i++)
mat1[i] = i;
mat2[0] = 1;
for (j = 1; j <= b.length(); j++)
{
for (i = 1; i <= a.length(); i++)
{
int c = (a.charAt(i - 1) == b.charAt(j - 1) ? 0 : 1);
mat2[i] =
Math.min(mat1[i - 1] + c,
Math.min(mat1[i] + 1, mat2[i - 1] + 1));
}
// Swap:
int[] x = mat1;
mat1 = mat2;
mat2 = x;
mat2[0] = mat1[0] + 1;
}
// It's row #1 because we swap rows at the end of each outer loop,
// as we are to return the last number on the lowest row
return mat1[a.length()];
}
これは、厳密なテストが、それは大丈夫動作しているようだされていません。それは、私は大学の運動のために作られたPython実装に基づいていました。この情報がお役に立てば幸い!
私はレーベンシュタイン距離のか<のhref = "HTTP noreferrer">いずれかテキストを比較するためのジャカード距離でます。
私は SumMetrics をJavaで見つけましたが、持っていませんそれを使用します。