6

我特别致力于一个功能,以允许 人名的拼写错误和别名。我做了一些研究,发现字符串度量和语音库也有很多算法。

我已经尝试了一些,并且所有这些Jaro Winkler给出了一些好的结果,如下所示。

compareStrings("elon musk","elon musk"))    --> 1.0 
compareStrings("elonmusk","elon musk"))     --> 0.98
compareStrings("elon mush","elon musk"))    --> 0.99
compareStrings("eln msuk","elon musk"))     --> 0.94
compareStrings("elon","elon musk"))         --> 0.89
compareStrings("musk","elon musk"))         --> 0.0  //This is bad, but can fix that.
compareStrings("mr elon musk","elon musk")) --> 0.81

以上是来自Apache commons Library的实现。我想知道是否有更好的实现可以更好地服务于目的。任何帮助表示赞赏。

编辑:@newuserua_ext @Trasher 谢谢,感谢您抽出宝贵的时间。我已经完成了与此相关的所有 StackExchange Q&A。并发布了这个关注人名的问题。

4

2 回答 2

0

考虑Double Metaphone。我们成功地使用它来找到名称的“听起来”匹配。您可以在 Apache Commons 中找到 Java 的实现:

https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/DoubleMetaphone.html

于 2016-12-09T07:12:37.113 回答
0

一种可能性是Levenshtein distance,它测量给定特定允许操作的字符串的编辑距离。使用动态编程可以或多或少地对其进行有效评估,但并不真正适合确定语音相似度。

于 2016-12-09T07:16:09.810 回答