如何发现几乎相同的字符串?

时间:2013-10-18 17:55:38

标签: java string

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

根据我的方法,

Paul Samuelson-SmithPaul 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可以帮助解决可能的拼写错误?我怎样才能改进我的方法?

2 个答案:

答案 0 :(得分:4)

Possible duplicate

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

答案 1 :(得分:1)

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