gpt4 book ai didi

R:生成具有stringdist和stringdistmatrix的近匹配项列表

转载 作者:行者123 更新时间:2023-12-04 06:58:46 30 4
gpt4 key购买 nike

我发现了出色的“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”转换成其他东西。

最佳答案

你可以这样做:

library(reshape2)
d <- unique(melt(m))
out <- subset(d, value > 0 & value < 5)

在这里, meltm转换为长格式(2列带有字符串名称,1列带有值)。但是,由于我们已经融化了对称矩阵,因此我们使用 unique进行重复数据删除。

另一种方法是使用 dplyr(因为所有酷 child 现在都在管道中使用 dplyr):
library(dlpyr)
library(reshape2)
library(magrittr)

out <- melt(m) %>% distinct() %>% filter(value > 0 & value < 5)

第二种选择可能更快,但我还没有真正计时。

关于R:生成具有stringdist和stringdistmatrix的近匹配项列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31486913/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com