4

我编写了一个方法来帮助匹配代表同一个人但以不同方式(全名或简称)编写的名称,例如:

Paul Samuelson-Smith并且Paul Smith根据我的方法被认为是平等的:

private static boolean equalName(String name_2, String name_1){
        boolean equality1 = true;
        name_1 = name_1.replace("&", " ").replace("-", " ");
        String  []  names1 = name_1.split(" ");
        for (int i = 0; i < names1.length ; i ++) {
            if (!name_2.contains(names1[i])) {equality1 = false; break;}
        }
        boolean equality2 = true;
        name_2 = name_2.replace("&", " ").replace("-", " ");
        String  []  names2 = name_2.split(" ");
        for (int i = 0; i < names2.length ; i ++) {
            if (!name_1.contains(names2[i])) {equality2 = false; break;}
        }
        return equality1 || equality2;
    }

但是,如果名称中有拼写错误,我仍然有一个问题,比如说Paul Samuelson-SmithPaull Smith是同一个人。我的问题是是否有任何 API 可以帮助解决可能的拼写错误?如何改进我的方法?

4

2 回答 2

4

可能重复

这是一个内置了一些距离算法的库:http: //sourceforge.net/projects/simmetrics/

于 2013-10-18T17:58:48.020 回答
1

您需要的算法不能只返回真/假。例如,然后您比较“Paula Smith”和“Paul Smith”以及“Paul Saumelson-Smith”,您应该选择最佳匹配。看看这里:http ://www.katkovonline.com/2006/11/java-fuzzy-string-matching/但它更适合分类,所以如果您需要在大型数据库上工作并选择最佳匹配。

于 2013-10-18T18:10:55.083 回答