3

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

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

4

1 回答 1

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

于 2015-03-05T12:42:27.320 回答