【问题标题】:Fuzzy String Comparison - Detecting shorthand names模糊字符串比较 - 检测速记名称
【发布时间】:2012-04-27 01:17:15
【问题描述】:

这将是我第二次询问关于计算语言学/模糊字符串匹配的问题,但这次不是关于词干。

我的第一个问题是使用模糊字符串匹配对数据库进行重复数据删除,而我已经做到了。现在,我必须检测一个字符串是否是另一个字符串的简写。例如:

  • JOHN ADRIAN FREEMAN WELTER 等于 JAF Welter 或 JAFWelter
  • MICROSOFT OFFICE 等于 MS OFFICE
  • BUILDING 等于 BLDG

我目前正在使用 SimMetrics 的 .Net 版本来解决我的第一个问题。那么,SimMetrics 中有没有一种方法可以解决我的问题呢?如果没有,那么解决这个问题的最佳方法是什么?

这是 SimMetrics 中实现的指标:

  • 汉明距离
  • Levenshtein 距离
  • Needleman-Wunch 距离或卖方算法
  • 史密斯-沃特曼距离
  • Gotoh 距离或 Smith-Waterman-Gotoh 距离
  • 街区距离或L1距离或城市街区距离
  • 蒙格埃尔坎距离
  • Jaro 距离度量
  • 雅罗·温克勒
  • SoundEx 距离度量
  • 匹配系数
  • 骰子系数
  • Jaccard 相似度或 Jaccard 系数或 Tanimoto 系数
  • 重叠系数
  • 欧几里得距离或 L2 距离
  • 余弦相似度
  • 变化距离
  • Hellinger 距离或 Bhattacharyya 距离
  • 信息半径(Jensen-Shannon 散度)
  • 谐波平均值
  • 偏斜发散
  • 混淆概率
  • Fellegi 和 Sunters (SFS) 指标
  • TFIDF 或 TF/IDF
  • FastA
  • BlastP
  • 最大匹配数
  • q-gram
  • Ukkonen 算法

我对所有这些算法都不是很熟悉。我已经在这里使用的是 Leveshtein Distance、Needleman-Wunch、Jaro-Winkler、SoundEx 和 TF/IDF。而且我认为这些算法还不足以解决这个速记名问题

【问题讨论】:

  • 您能否提供更多关于您是如何做到这一点的信息:My first problem was to deduplicate a database using fuzzy string matching, and I already accomplished that

标签: c# shorthand similarity fuzzy-comparison


【解决方案1】:

您很可能需要自定义方法。这是我要尝试的:

  1. JOHN ADRIAN FREEMAN WELTER 等于 JAF Welter 或 JAFWelter

在这里,您可以使用单词的第一个字母来获取缩写。如果所有出现的最后一个单词都是完整的,这很可能会为您提供独特的分辨率,否则您可能会找到具有相同缩写的其他单词序列(例如 JAFW:Java 作为外来词)

  1. MICROSOFT OFFICE 等于 MS OFFICE

在这里,您需要一个已知单词的字典,并认识到 Microsoft 可以从 MicroSoft 放在一起(假设两者都在你的字典)并在这些上使用第一种方法

  1. BUILDING 等于 BLDG

在这里,您将需要一个单词词典和自定义缩写(我认为您不会找到一种可以计算所有单词的缩写的规则/算法)

【讨论】:

  • 感谢您的回复。实际上,我正在制作一个与您的答案类似的算法。 1. 但是,我放弃了,因为如果我将阈值设置得较低,它总是给我假阴性,如果设置得太高,它总是给我假阳性。那我就改进一下吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
  • 2020-02-29
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多