识别与给定字符串最接近的匹配

时间:2014-07-14 18:55:34

标签: java algorithm

我的要求是能够匹配两个相似但不完全匹配的字符串。 例如,给定以下字符串

  • 名字
  • 姓氏
  • LName的
  • FName参数

输出应为FirstName,FName和Last Name,LName,因为它们是逻辑匹配。有没有我可以用来做这个的库?我正在使用JAVA来实现此功能。

由于 RAAM

5 个答案:

答案 0 :(得分:4)

您可以使用Apache Commons StringUtils ...

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#getLevenshteinDistance(java.lang.CharSequence,%20java.lang.CharSequence)

但值得注意的是,这可能不是问题中特定用例的最佳算法 - 我建议在这里阅读其他一些答案以获得更多想法。

答案 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;
}