У меня есть два файла, один из которых заполнен ключевыми словами (примерно 2000 строк), а другой - текстом (примерно 770 000 строк).Файл ключевых слов выглядит следующим образом:
Event Name Keyword
All-day tabby fest tabby, all-day
All-day tabby fest tabby, fest
Maine Coon Grooming maine coon, groom
Maine Coon Grooming coon, groom
keywordFile <- tibble(EventName = c("All-day tabby fest", "All-day tabby fest", "Maine Coon Grooming","Maine Coon Grooming"), Keyword = c("tabby, all-day", "tabby, fest", "maine coon, groom", "coon, groom")
Текстовый файл выглядит следующим образом:
Description
Bring your tabby to the fest on Tuesday
All cats are welcome to the fest on Tuesday
Mainecoon grooming will happen at noon Wednesday
Maine coons will be pampered at noon on Wednesday
text <- tibble(Description = c("Bring your tabby to the fest on Tuesday","All cats are welcome to the fest on Tuesday","Mainecoon grooming will happen at noon Wednesday","Maine coons will be pampered at noon on Wednesday")
Мне нужно перебирать текстовый файл и искать нечеткие совпадения (должно включать каждое словов столбце «Ключевое слово») и верните новый столбец, который отображает значение ИСТИНА или Ложь.Если это ИСТИНА, то я хочу, чтобы в третьем столбце отображалось название события.Итак, что-то вроде:
Description Match? Event Name
Bring your tabby to the fest on Tuesday TRUE All-day tabby fest
All cats are welcome to the fest on Tuesday FALSE
Mainecoon grooming will happen at noon Wednesday TRUE Maine Coon Grooming
Maine coons will be pampered at noon on Wednesday FALSE
Я могу успешно выполнять свои нечеткие совпадения (после преобразования всего в нижний регистр) с такими вещами, благодаря Molx ( Как я могу проверить, если несколько строксуществует в другой строке? ):
str <- c("tabby", "all-day")
myStr <- "Bring your tabby to the fest on Tuesday"
all(sapply(str, grepl, myStr))
Однако я застреваю при попытке нечеткого сопоставления целых файлов.Я попробовал что-то вроде этого:
for (i in seq_along(text$Description)){
for (j in seq_along(keywordFile$EventName)) {
# below I am creating the TRUE/FALSE column
text$TF[i] <- all(sapply(keywordFile$Keyword[j], grepl,
text$Description[i]))
if (isTRUE(text$TF))
# below I am creating the EventName column
text$EventName <- keywordFile$EventName
}
}
Я не думаю, что у меня возникают проблемы с преобразованием правильных вещей в векторы и строки.Мой столбец keywordFile $ Keyword представляет собой набор строковых векторов, а мой столбец text Description - символьная строка.Но я борюсь с тем, как правильно перебрать оба файла.Я получаю ошибку:
Error in ... replacement has 13 rows, data has 1
Кто-нибудь делал что-то подобное раньше?