我正在尋找比較字符串相似性的方法。具體來說,給定兩個地址,我希望衡量它們的相似性。統計字符串比較
E.G.
鑑於8219石灰森林大道 和8219石灰福斯特大道
比較器的輸出應該給我的琴絃有多相似的想法。
我正在尋找比較字符串相似性的方法。具體來說,給定兩個地址,我希望衡量它們的相似性。統計字符串比較
E.G.
鑑於8219石灰森林大道 和8219石灰福斯特大道
比較器的輸出應該給我的琴絃有多相似的想法。
Levenshtein距離是要走的路。剛開箱時的想法 - 兩個地址可能會有很大的不同(一個可以是郵政編碼,另一個是帶數字的街道),並且花費大量資金創建出色的地理編碼服務(如https://developers.google.com/maps/documentation/geocoding/?hl=cs)。因此,另一種方法是通過地理編碼服務計算兩個地址的經度/緯度,然後查看緯度/經度是否匹配:)
,你可以使用類似這樣
import org.apache.commons.lang.StringUtils;
public class StringComparison {
/**
* @param args
*/
public static void main(String[] args) {
String s1 = "8219 Lime Forest Blvd";
String s2 = "8219 Lime Forst Boulevard";
//number of chars that differ
int distance = StringUtils.getLevenshteinDistance(s1, s2);
//"relative" difference
float d = (float)distance/(float)s1.length();
System.out.println(d);
}
}
getLevenshteinDistance會給你一個數字,不同於S1和S2字符的。
我認爲這是更有用的,如果你將這個數字除以字符串長度(小心除以零),並嘗試手動找到一個甜蜜的地方,其差異足夠小,以檢測相同的地址(對我而言,這是通常大約20〜30%)
這個例子是在Java中,使用的lib是http://commons.apache.org/proper/commons-lang/index.html
此外,您可以改善這只是更換已知的縮寫和也一道努力。
您需要更多精確的「類似」定義才能真正獲得任何有用的東西,我認爲...一旦你確切地知道你在找什麼,雖然,有很多有據可查的算法,這種事情... – twalberg