统计字符串比较

时间:2014-02-14 16:34:19

标签: string algorithm comparison

我正在寻找一种比较字符串相似性的方法。具体来说,给定两个地址,我想测量它们的相似性。

E.G。

鉴于8219 Lime Forest Blvd 和8219 Lime Forst Boulevard

比较的输出应该让我知道字符串的相似程度。

2 个答案:

答案 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

此外,您可以改进这一点,只需更换已知的缩写并尝试使用它们。