Проверить, все ли символы одной строки существуют в другой строке в r

Я пытаюсь сравнить строки как PRABHAKAR SHARMA а также SHARMA KUMAR PRABHAKAR, намерение состоит в том, чтобы проверить, существуют ли все символы более короткой строки в другой строке. Если это так, я должен получить 100% совпадение, иначе процент, представляющий процент совпадений символов.

Я пытался с помощью levenshteinSim в RecordLinkage пакет, но он дает число, соответствующее количеству изменений, необходимых для изменения одной строки на другую.

install.packages("RecordLinkage")
require(RecordLinkage)
levenshteinSim("PRABHAKAR SHARMA","SHARMA KUMAR PRABHAKAR")

#[1] 0.3636364

Я хочу 100% совпадение в таком случае. Кроме того, это должно быть воспроизведено для более чем 1 000 000 записей.

2 ответа

Решение

Вот один подход

s1 <- "PRABHAKAR SHARMA"
s2 <- "SHARMA KUMAR PRABHAKAR"

compare <- function(s1, s2) {
    c1 <- unique(strsplit(s1, "")[[1]])
    c2 <- unique(strsplit(s2, "")[[1]])
    length(intersect(c1,c2))/length(c1)
}

compare(s1,s2)
#1

Это может быть немного медленно, хотя. И он также считает символ пространства символом. использование Vectorize наносить на столбец:

dat <- data.frame(small=c("a", "b"), big=c("aa", "cc"), stringsAsFactors=FALSE)
vcomp <- Vectorize(compare)
dat <- transform(dat, comp=vcomp(small, big))

Если символы, которые нужно рассмотреть, являются только буквами, которые вы можете использовать:

comp <- function(s1, s2){         
     in1 = letters %in% strsplit(tolower(s1), "")[[1]]
     in2 = letters %in% strsplit(tolower(s2), "")[[1]]
     sum(in1 & in2)/sum(in1)
}
Другие вопросы по тегам