我的要求是能够匹配两个相似但不完全匹配的字符串。 例如,给定以下字符串
输出应为FirstName,FName和Last Name,LName,因为它们是逻辑匹配。有没有我可以用来做这个的库?我正在使用JAVA来实现此功能。
由于 RAAM
答案 0 :(得分:4)
您可以使用Apache Commons StringUtils ...
但值得注意的是,这可能不是问题中特定用例的最佳算法 - 我建议在这里阅读其他一些答案以获得更多想法。
答案 1 :(得分:2)
根据您提供的示例,您应该使用修改后的Levenshtein距离,其中添加空格的惩罚很小,并且不匹配字符的惩罚更大。这将匹配缩写到缩写相当好的字符串。但是,假设您主要处理将缩写与相应的较长版本的字符串对齐。如果你想要一个关于你可以/应该使用哪种方法的更详细和尖锐的答案,你应该更准确地详细说明你想要执行什么样的匹配(例如更多的例子,或某种高级描述)。
答案 2 :(得分:1)
可以找到对你的一个非常相似的问题的答案here。
此外,维基百科还有一篇关于可以找到here的近似字符串匹配的文章。如果第一个链接不是您想要的,我建议您阅读维基百科文章并深入了解您需要的内容。
抱歉,我个人无法为您提供更多帮助,但我真的希望这些资源可以帮助您找到您想要的东西!
答案 3 :(得分:1)
拼写检查算法使用此算法的变体。 http://en.wikipedia.org/wiki/Levenshtein_distance。我在课堂上为一个项目实现了它,这样做非常简单。如果您不想自己实现它,可以使用该名称搜索其他库。
答案 4 :(得分:0)
StringUtils就是最好的 - 这是我在stackOverflow上找到的一个例子 - 正如@CupawnTae所说的那样
以下是我遇到的一个简单例子
public static Object getTheClosestMatch(Collection<?> collection, Object target) {
int distance = Integer.MAX_VALUE;
Object closest = null;
for (Object compareObject : collection) {
int currentDistance = StringUtils.getLevenshteinDistance(compareObject.toString(), target.toString());
if(currentDistance < distance) {
distance = currentDistance;
closest = compareObject;
}
}
return closest;
}