模糊字符串比较 - 检测速记名称

时间:2012-04-15 11:48:44

标签: c# shorthand similarity fuzzy-comparison

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

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

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

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

以下是SimMetrics中实施的指标:

  • 汉明距离
  • Levenshtein距离
  • Needleman-Wunch距离或卖家算法
  • Smith-Waterman距离
  • Gotoh Distance或Smith-Waterman-Gotoh距离
  • 区块距离或L1距离或城市街区距离
  • Monge Elkan距离
  • Jaro距离指标
  • Jaro Winkler
  • SoundEx距离指标
  • 匹配系数
  • Dice's Coefficient
  • Jaccard相似度或Jaccard系数或Tanimoto系数
  • 重叠系数
  • 欧几里德距离或L2距离
  • 余弦相似度
  • 变奏距离
  • Hellinger距离或Bhattacharyya距离
  • 信息半径(Jensen-Shannon分歧)
  • Harmonic Mean
  • 歪斜分歧
  • 混乱概率
  • Fellegi and Sunters(SFS)指标
  • TFIDF或TF / IDF
  • 的FastA
  • BLASTP
  • 最大匹配
  • Q-克
  • Ukkonen Algorithms

我对所有这些算法并不熟悉。我在这里使用的是Leveshtein Distance,Needleman-Wunch,Jaro-Winkler,SoundEx和TF / IDF。我认为这些算法不足以解决这个速记名称问题

1 个答案:

答案 0 :(得分:2)

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

1)JOHN ADRIAN FREEMAN WELTER等同于JAF Welter或JAFWelter

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

2)MICROSOFT OFFICE等于MS OFFICE

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

3)BUILDING等于BLDG

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