我需要測量兩個地方之間的物理距離,這兩個地方的名稱以字符串形式提供。由於有時名稱的寫法會略有不同,因此我正在尋找一個庫,可以幫助我衡量差異,然後將其與經緯度的度量值結合以選擇正確的匹配。首選語言:Java或PHP。兩個地方之間的物理距離
有什麼建議嗎?
我需要測量兩個地方之間的物理距離,這兩個地方的名稱以字符串形式提供。由於有時名稱的寫法會略有不同,因此我正在尋找一個庫,可以幫助我衡量差異,然後將其與經緯度的度量值結合以選擇正確的匹配。首選語言:Java或PHP。兩個地方之間的物理距離
有什麼建議嗎?
看看Levenshtein distance。這是衡量兩個琴絃彼此不同的方式。
希望我正確理解你的問題;在「經度和緯度」相同的句子中使用「距離」可能會令人困惑!
雖然用C(Python和TCL綁定),libdistance將是對字符串/數據應用多個距離度量的工具。
度量包括:
我發現在Java中SumMetrics,但沒有用它。
我冒昧地一塊我寫來計算Levenshtein距離爲Java代碼C#代碼轉換。這裏僅僅使用兩個交替的,而不是一個大的交錯數組一維數組:
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實現。希望這可以幫助!
你可能會使用phonetic algorithm找到小幅misspelld名字得到一些像樣的成績。
另外,如果你使用了更多的機械編輯距離,你可能會看到使用佔鍵盤幾何加權功能更好的結果(即物理上接近鍵是「便宜」遠比更換掉的)。這是一個專利方法順便說一句,所以要小心不要寫的東西,變得太受歡迎;)
我會建議Levenshtein Distance或Jaccard Distance比較文字。
嘿,我是困惑和編輯的標題來強調,而錯誤的焦點 - 這個問題很可能最終還是一個字符串距離一個,作爲公認的答案建議。 – icedwater 2013-07-02 06:21:54