Как проверить, может ли данное слово составить слово в R? - PullRequest
1 голос
/ 06 августа 2020

Мне дан список слов:

words = c("is", "am", "are", "I", "He", "She", "toy", "jam", "kite", "playing", "eating")

, а также фрейм данных концентрированного предложения, например:

> example
  [,1]            
1 "Iamplayingkite"
2 "Itiseatingbone"

строка 1 Iamplayingkite, составлены всех слов в списке, где в строке 2 Itiseatingbone отсутствуют два слова из списка (It и bone). Мне нужен список, который вернул все пропущенные слова, например missing.word = c("It", "bone", ...etc)

> dput(example)
structure(c("Iamplayingkite", "Itiseatingbone"), .Dim = 2:1, .Dimnames = list(
    c("1", "2"), NULL))

1 Ответ

0 голосов
/ 06 августа 2020

Один из подходов - создать чередование регулярных выражений, содержащее все подстроки. Затем используйте gsub, чтобы удалить все подстроки из входных данных, где они могут быть найдены. Наконец, оставьте в фрейме данных только строки, длина слов которых после замены по-прежнему больше нуля.

words <- c("is", "am", "are", "I", "He", "She", "toy", "jam", "kite", "playing", "eating")
regex <- paste0("(?:", paste(words, collapse="|"), ")")
example <- data.frame(word=c("Iamplayingkite", "Itiseatingbone"), stringsAsFactors=FALSE)
example[nchar(gsub(regex, "", example$word)) > 0,]

[1] "Itiseatingbone"

Что касается вывода, что «отсутствующие» слова - это It и bone, вы не можете легко сделать это, не имея базы знаний, которая говорит вам, что It и bone - это четные слова. Регулярное выражение само по себе не может понять это, не без ссылки на go by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...