【问题标题】:How to spot almost the same strings?如何发现几乎相同的字符串?
【发布时间】:2013-10-18 17:55:37
【问题描述】:

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

根据我的方法,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 可以帮助解决可能的拼写错误?如何改进我的方法?

【问题讨论】:

  • 您可能需要查看Levenstein distance。但是,在实践中,我发现唯一可靠的方法是保留一个“别名”表并在那里进行检查。

标签: java string


【解决方案1】:

Possible duplicate

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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多