ОБНОВЛЕНИЕ: Спасибо за ваш вклад. Я переписал вопрос и добавил лучший пример, чтобы выделить неявные требования, которые не были рассмотрены в моем первом примере.
Вопрос Я ищу общее tidy
решение для удаления nрограмм, содержащих стоп-слова. Короче говоря, нграммы - это строки слов, разделенных пробелом. Юниграмма содержит 1 слово, биграмма - 2 слова и т. Д. Моя цель - применить это к фрейму данных после использования unnest_tokens()
. Решение должно работать с фреймом данных, содержащим смесь ngram любой длины (uni, bi, tri ..) или, по крайней мере, bi & tri и выше.
- Для получения дополнительной информации о ngrams см. Вики: https://en.wikipedia.org/wiki/N-gram
- Мне известен этот вопрос: Удалите диаграммы с ведущими и замыкающими стоп-словами . Тем не менее, я ищу общее решение, которое не требует, чтобы стоп-слово было ведущим или замыкающим, а также неплохо масштабировалось бы.
- как указано в комментариях, здесь есть решение для биграмм: https://www.tidytextmining.com/ngrams.html#counting-and-filtering-n-grams
Новый пример данных
ngram_df <- tibble::tribble(
~Document, ~ngram,
1, "the",
1, "the basis",
1, "basis",
1, "basis of culture",
1, "culture",
1, "is ground water",
1, "ground water",
1, "ground water treatment"
)
stopword_df <- tibble::tribble(
~word, ~lexicon,
"the", "custom",
"of", "custom",
"is", "custom"
)
desired_output <- tibble::tribble(
~Document, ~ngram,
1, "basis",
1, "culture",
1, "ground water",
1, "ground water treatment"
)
Создано 21 марта 2019 г. пакетом REPEX (v0.2.1)
Желаемое поведение
ngram_df
следует преобразовать вdesired_output
, используя стоп-слова из столбцаword
вstopword_df
.- каждая строка, содержащая стоп-слово, должна быть удалена
- границы слов должны соблюдаться (т.е. поиск
is
не должен удалятьbasis
)
моя первая попытка представить ниже:
пример данных
library(tidyverse)
library(tidytext)
df <- "Groundwater remediation is the process that is used to treat polluted groundwater by removing the pollutants or converting them into harmless products." %>%
enframe() %>%
unnest_tokens(ngrams, value, "ngrams", n = 2)
#apply magic here
df
#> # A tibble: 21 x 2
#> name ngrams
#> <int> <chr>
#> 1 1 groundwater remediation
#> 2 1 remediation is
#> 3 1 is the
#> 4 1 the process
#> 5 1 process that
#> 6 1 that is
#> 7 1 is used
#> 8 1 used to
#> 9 1 to treat
#> 10 1 treat polluted
#> # ... with 11 more rows
пример списка игнорируемых слов
stopwords <- c("is", "the", "that", "to")
желаемый результат
#> Source: local data frame [9 x 2]
#> Groups: <by row>
#>
#> # A tibble: 9 x 2
#> name ngrams
#> <int> <chr>
#> 1 1 groundwater remediation
#> 2 1 treat polluted
#> 3 1 polluted groundwater
#> 4 1 groundwater by
#> 5 1 by removing
#> 6 1 pollutants or
#> 7 1 or converting
#> 8 1 them into
#> 9 1 harmless products
Создано 20 марта 2019 г. пакетом REPEX (v0.2.1)
(пример предложения из: https://en.wikipedia.org/wiki/Groundwater_remediation) < / sup>