【问题标题】:Approximate String Matching in RR中的近似字符串匹配
【发布时间】:2013-04-15 05:37:14
【问题描述】:

对于我的研究,我必须匹配两个包含基金信息的数据集。不幸的是,没有通用标识符。好消息是我在两份文件中都有一个文件编号的标识符,但它可以包含多个资金。如果文件中有多个基金(例如 20 个),我只能通过基金名称进行匹配,有时可能略有不同。请注意,在任何数据集中,每个文档的基金数量是相同的。经过一番搜索后,我尝试使用此功能(在此处找到:agrep: only return best match(es)):

ClosestMatch2 = function(string, stringVector){

  distance = levenshteinSim(string, stringVector);
  stringVector[distance == max(distance)]

}

这对大多数基金都有效,但我发现了两个问题:

  1. 有时会有多个匹配项
  2. 有时我匹配错误

例如: 此功能将“INSTITUTIONAL LARGE CORE FUND”匹配到“Transamerica Partners Institutional Core Bond”,而不是“Transamerica Partners Institutional Large Core”。

我有两个想法来规避这些问题:

  1. 我使用另一个匹配函数来验证上面的函数。 IE。如果两个函数产生相同的结果,我只接受匹配。
  2. 我以某种方式调整了上面的函数。

非常感谢您的帮助。 最好的, 劳伦兹

【问题讨论】:

  • 您似乎在寻找整个子字符串的存在(如“Large”、“Partners”等),而不是其中的“不匹配”。对吗?
  • 大部分时间是正确的。但是,在极少数情况下子字符串可能但不相同,例如:Mid-Cap Fund & Mid Cap Fund 或 MODERATE STRATEGY ALLOCATION FUND & Moderate Strategy Alloc。基金

标签: r string-matching levenshtein-distance


【解决方案1】:

RecordLinkage 包允许您使用多种方法(例如 levenshtein 以及其他度量)匹配字符串,它允许您定义阈值,甚至使用分类模型来指示您何时可以匹配。

【讨论】:

  • 如果能展示一下使用这个包的可能性,或者把它写在 cmets 下,那就太好了。我相信这还不是答案。
  • 感谢您的回答!我检查了包装,只找到了 Jaro-Winkler (jarowinkler) 和一些对 levenshtein 距离 (levenshteinDist) 的修改,我将尝试作为替代品。既然你说有“几种”方法,我想知道我是否监督过其他方法。感谢您的澄清!
  • 例如字符串的汉明距离也很快成为可能。但是您可以在比较中提供一个 strcmpfun ,它必须将要比较的两个字符串作为参数并返回 0-1 范围内的相似度值
猜你喜欢
  • 2011-05-11
  • 2015-02-12
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2016-03-28
  • 1970-01-01
相关资源
最近更新 更多