我正在寻找一种比较字符串相似性的方法。具体来说,给定两个地址,我想测量它们的相似性。
E.G。
鉴于8219 Lime Forest Blvd 和8219 Lime Forst Boulevard
比较的输出应该让我知道字符串的相似程度。
答案 0 :(得分:4)
Levenshtein距离是要走的路。只是开箱即用的想法 - 两个地址可能会有很大不同(一个可以是邮政编码,另一个是带数字的街道),并且花了很多钱来创建令人敬畏的地理编码服务(如https://developers.google.com/maps/documentation/geocoding/?hl=cs)。因此,替代方法是通过地理编码服务计算两个地址的经度/纬度,并查看纬度/经度是否匹配:)
答案 1 :(得分:2)
你可以使用这样的东西
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
此外,您可以改进这一点,只需更换已知的缩写并尝试使用它们。