R中两个句子之间的字级编辑距离

时间:2015-03-05 11:56:49

标签: r data-mining text-mining stringdist

我正在寻找R中的快速解决方案来确定两个句子之间的单词级编辑距离。更具体地说,我想确定单词的最小数量的添加,替换或删除,以将句子A转换为句子B.例如,如果句子A是"非常好的汽车"和句子B是"漂亮的红色车",结果应该是2(1个删除和1个添加)。

我知道R中存在用于字符级编辑距离的现有解决方案(例如,来自包' stringdist')的原生adist()stringdist(),但我找不到字级。

1 个答案:

答案 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"," "))