首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在compare.linkage中设置Jarowinkler的权重

在compare.linkage中设置Jarowinkler的权重
EN

Stack Overflow用户
提问于 2015-07-02 07:17:18
回答 1查看 669关注 0票数 2

我在R中使用记录链接包中的compare.linkage方法来比较2组字符串的相似性。默认的字符串比较方法是jarowinkler,其3种默认权重设置为1/3、1/3和1/3。

我想覆盖默认的权重,比如4/9,4/9和1/9。我怎么做呢?提前谢谢。

默认脚本是:

代码语言:javascript
复制
rpairs <- compare.linkage(StringSet1, StringSet2, strcmp = TRUE, strcmpfun = jarowinkler)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-02 08:24:28

您必须创建自己的比较函数,它比较两个字符串。在这个函数中,您可以调用jarowinkler。最简单的方法是创建一个闭锁

代码语言:javascript
复制
jw <- function(W_1, W_2, W_3) {
  function(str1, str2) {
    jarowinkler(str1, str2, W_1, W_2, W_3)
  }
}

这是一个传递要使用的权重参数的函数。此函数返回可以在compare.linkage调用中使用的比较函数:

代码语言:javascript
复制
rpairs <- compare.linkage(StringSet1, StringSet2,
  strcmp = TRUE, strcmpfun = jw(4/9, 4/9, 1/9))

Jaro算法计算匹配(使用一定带宽) m的字符数。对于两个字符串johnjohan,有4个字符匹配(john)。只接受选定的字符:

代码语言:javascript
复制
john
jonh

然后,它会计算转出t的数量。在这种情况下,有一个换位( hn是交换的)。

Jaro的相似性是由以下方面提供的:

代码语言:javascript
复制
1/3 * (w1 * m/l1 + w2 * m/l2 + w3 * (m-t)/m)) 

l1l2表示两个字符串的长度。对于权重都等于1/3的情况,这将导致0到1之间的分数(1=perfect匹配)。

Jaro度量为字符串开头匹配的字符添加了一个“奖励”,因为开头的错误通常较少(该度量是为名称创建的)。有关更多信息,请参见例如M.P.J . van der Loo (2014),用于近似字符串匹配的字符串包

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31177913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档