我正在寻找R中的快速解决方案来确定两个句子之间的单词级编辑距离。更具体地说,我想确定单词的最小数量的添加,替换或删除,以将句子A转换为句子B.例如,如果句子A是"非常好的汽车"和句子B是"漂亮的红色车",结果应该是2(1个删除和1个添加)。
我知道R中存在用于字符级编辑距离的现有解决方案(例如,来自包' stringdist')的原生adist()
和stringdist()
,但我找不到字级。
答案 0 :(得分:2)
怎么样
intersect(strsplit(levels(factor("very nice car"[1]))," ")[[1]],strsplit(levels(factor("nice red car"[1]))," ")[[1]])
> [1] "nice" "car"
length(intersect(strsplit(levels(factor("very nice car"[1]))," ")[[1]],strsplit(levels(factor("nice red car"[1]))," ")[[1]]))
> [1] 2
当然,您可以创建自己的功能,甚至可以使用list
:
my_function <- function (x, prsep = " ")
{
if (isTRUE(length(x) != 0) == TRUE && isTRUE(is.na(x)) ==
FALSE) {
if (isTRUE(is.list(x)) == TRUE) {
for (i in 1:length(x)) ifelse(isTRUE(length(x[[i]]) !=
0) == TRUE, x[[i]] <- strsplit(x[[i]], prsep)[[1]],
NA)
return(x)
}
else if (isTRUE(is.list(x)) == FALSE) {
Lt <- list()
for (i in 1:length(x)) Lt[[length(Lt) + 1]] <- strsplit(levels(factor(x[i])),
prsep)[[1]]
return(Lt[[1]])
}
}
else {
x
}
}
所以你需要
intersect(my_function("very nice car"," "), my_function("nice red car"," "))