我发现了优秀的包“stringdist”,现在想用它来计算字符串距离。特别是我有一组单词,我想打印出近似匹配,其中“近似匹配”是通过诸如 Levenshtein 距离之类的算法。
我在 shell 脚本中的工作代码非常慢,我能够在 stringdist 中加载并生成一个带有度量的矩阵。现在我想将该矩阵归结为一个较小的矩阵,该矩阵仅具有近似匹配,例如,度量非零但小于某个阈值。
kp <- c('leaflet','leafletr','lego','levenshtein-distance','logo')
kpm <- stringdistmatrix(kp,useNames="strings",method="lv")
> kpm
leaflet leafletr lego levenshtein-distance
leafletr 1
lego 5 6
levenshtein-distance 16 16 18
logo 6 7 1 19
m = as.matrix(kpm)
close = apply(m, 1, function(x) x>0 & x<5)
> close
leaflet leafletr lego levenshtein-distance logo
leaflet FALSE TRUE FALSE FALSE FALSE
leafletr TRUE FALSE FALSE FALSE FALSE
lego FALSE FALSE FALSE FALSE TRUE
levenshtein-distance FALSE FALSE FALSE FALSE FALSE
logo FALSE FALSE TRUE FALSE FALSE
好的,现在我有一个(大)dist,我如何将它减少回一个列表,其中输出类似于
leafletr,leaflet,1
logo,lego,1
仅适用于度量非零且小于 n=5 的情况?我找到了“apply()”,它可以让我进行测试,现在我需要弄清楚如何使用它。
该问题并非特定于 stringdist 和 stringdistmatrix 并且是非常基本的 R,但我仍然被卡住了。我怀疑答案涉及子集(),但我不知道如何将“dist”转换为其他东西。