【发布时间】:2015-10-07 19:54:24
【问题描述】:
我发现了优秀的包“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,但我仍然被卡住了。我怀疑答案涉及subset(),但我不知道如何将“dist”转换为其他内容。
【问题讨论】:
-
如果您能向我们展示
kpm或“您的大矩阵”将会很有帮助,这样我们就知道您在使用什么。或者,您可以通过提供一些虚拟数据或真实数据dput(head(read.table("..."),20))并将其包含在问题中来使您的问题可重现。 -
谢谢 Brandon,会的,我将缩减为 5x5 矩阵并包含所有代码。正在使用 100 大小的原件。
标签: r string matrix stringdist