сопоставление ключевых слов с серией текстовых комментариев - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть два набора информации:

  1. CSV-файл, где в каждой строке есть комментарий, например:

    a.Я люблю футбол б.Регби - сложная игра c.Hello World

  2. Еще один CSV-файл, содержащий список слов, связанных со спортом, например:

    a.теннис б.футбол с.регби

Что я хочу сделать, это: а.найдите, появляется ли хотя бы одно из слов во втором файле хотя бы раз в каждой отдельной строке первого файла.б.Если он появляется хотя бы один раз, его следует отнести к каждому виду комментариев как к спортивным.

Выходной файл должен выглядеть следующим образом:

Comments                          category
  a. I love football               sports
  b. Rugby is a tough game         sports
  c. Hello World                   others

Я хочу выполнить это упражнение в RЯ изучил функцию str_detect & grepl в R, но не достиг желаемого результата.

Ваша помощь приветствуется.

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

Вот один подход, который перебирает ключевые слова и сопоставляет предложения, используя grepl.В зависимости от того, насколько чисты данные предложения, вы можете рассмотреть agrepl, который допускает нечеткое сопоставление (но может также привести к ложным срабатываниям).

df <- data.frame(sentences=c("I love football", "Rugby is a tough game", "Hello World"))
keywords <- c("tennis", "football", "rugby")

cbind(df, sapply(keywords, function(x) grepl(x, df$sentences, ignore.case = TRUE)))

               sentences tennis football rugby
 1       I love football  FALSE     TRUE FALSE
 2 Rugby is a tough game  FALSE    FALSE  TRUE
 3           Hello World  FALSE    FALSE FALSE

Перечитывание вашего поста, если вы просто хотитеВы можете заниматься любым видом спорта, а не отдельным видом спорта:

cbind(df, sports = rowSums(sapply(keywords, function(x) grepl(x, df$sentences, ignore.case = TRUE))) > 0)
              sentences sports
1       I love football   TRUE
2 Rugby is a tough game   TRUE
3           Hello World  FALSE
...