【问题标题】:How do I compare the similarity of person names using a metric? [closed]如何使用度量比较人名的相似度? [关闭]
【发布时间】:2017-04-24 12:18:04
【问题描述】:

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

我已经尝试了一些,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。并发布了这个关于人名的问题。

【问题讨论】:

  • 投反对票时,请说明原因。我发布这个是因为我需要帮助,我在互联网上找不到更好的东西。
  • 看看这个(概述部分):github.com/tdebatty/java-string-similarity。祝你好运!
  • @Thrasher 谢谢你的链接 :) 正如我所提到的,我的问题对人名非常特殊。
  • “Jaro–Winkler 距离度量经过专门设计,最适合用于人名等短字符串,并用于检测拼写错误。”
  • @Thrasher 感谢上帝。终于有人明白了。确切地说,我正在寻找一种更好的算法来验证“人名”。

标签: java algorithm heuristics string-metric


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 2014-03-06
      • 2011-08-09
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多