我编写了一个方法,可以帮助匹配代表同一个人但以不同方式编写的名称(全名或简短版本),例如:
根据我的方法, 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-Smith
和Paull Smith
是同一个人。我的问题是,是否有任何API可以帮助解决可能的拼写错误?我怎样才能改进我的方法?
答案 0 :(得分:4)
这是一个内置了一些距离算法的库: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/但它更适合分类,所以如果您需要在大型数据库上工作并选择最佳匹配。