对于我的数据分析问题,我通常需要对名称进行命名,即名称A和B,如果A和B共享大量公共子串,而不论这些子串的顺序如何,我都认为它们是相同或非常相似的。
例如,对于“ COLD”和c(“ FLOOD”,“ COLD / WIND CHILL”),我想选择“ COLD / WIND CHILL”,使其与“ COLD”更像,而不是“ FLOOD”。
我当前的任务是在R中。因此,我的具体问题如下:
R中是否已经定义了此类指标?
是否可以提供我自己的实现并以某种方式与R的stringdist软件包集成?
对于我的需求,只要可以在B中找到A或在A中找到B,我就可以简单地使用正则表达式搜索,我可能会认为它们之间的距离为0。
非常感谢!
编辑:
在以下情况下:
> vv <- c("FLOOD", "COLD/WIND CHILL")
> sapply(vv, adist, y = "COLD")
FLOOD COLD/WIND CHILL
3 11
我希望从“ COLD”到“ COLD / WIND CHILL”的距离小于“ COLD”到“ FLOOD”的距离。
在找到匹配的子字符串之后,指标似乎不得不忽略要删除的其余部分。
编辑1:
我原来的问题已经解决。这是在R中使用amatch
of的相关问题的跟进stringdist
:
在我看来adist
,即使使用,即使stringdist
在同一包中,我也无法再现与相同的结果amatch
。
下图是插图:
vv <- c("FLOOD", "COLD/WIND CHILL")
sapply(vv, adist, y = "COLD",costs=list(deletions=0))
FLOOD COLD/WIND CHILL
2 0
stringdist("COLD", c("FLOOD", " COLD/WIND CHILL"), method = 'lv', weight=c(0.001, 0.99, 0.99, 0.99))
[1] 1.981 1.002
amatch("COLD", c("FLOOD", " COLD/WIND CHILL"), method = 'lv', weight=c(0.0001, 0.999, 0.999, 0.999), maxDist = 100)
[1] 1
在上述情况下,通过使用的计算stringdist
,amatch
应返回2
,而不是1
。
根据stringdist文件,
“权重:
对于method ='osa'或'dl',按该顺序删除,插入,替换和换位的罚款。当method ='lv'时,对换位的罚款将被忽略。”
我已经相应地选择了权重,以消除删除带来的损失,同时将其他操作的损失最大化。令人鼓舞的是stringdist
,使用权重设置显示了预期的行为。
我以为amatch
可以stringdist
用来进行计算,但是amatch
与stringdist
!的行为矛盾的行为似乎很奇怪。
我希望开始amatch
工作,这样我就不必使用adist
或重新实现它stringdist
。
再次感谢您的帮助。
您可以使用adist
模糊距离。该距离是广义的Levenshtein距离。
vv <- c("COLD","FLOOD")
sapply(vv,adist,y="COLD/WIND CHILL")
## COLD FLOOD
## 11 13 ## the distance to COLD < distance to FLOOD
您可以使用costs
参数来设置您要如何通过以下方式来计算距离:删除,替换,插入。例如:
sapply(vv, adist, y = "COLD",costs=list(deletions=0))
FLOOD COLD/WIND CHILL
2 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句