Конкретный список стоп-слов Quanteda - PullRequest
0 голосов
/ 14 января 2019

Я хотел бы удалить конкретный список со стоп-словами, используя quanteda.

Я использую это:

df <- data.frame(data = c("Here is an example text and why I write it", "I can explain and here you but I can help as I would like to help"))
mystopwords <- c("is","an")
corpus<- dfm(tokens_remove(tokens(df$data, remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE), remove = c(stopwords(language = "el", source = "misc"), mystopwords), ngrams = c(4,6)))

Но я получаю эту ошибку:

> Error in tokens_select(x, ..., selection = "remove") : 
  unused arguments (remove = c(stopwords(language = "en", source = "misc"), stopwords1), ngrams = c(4, 6))

Как правильно использовать список mystopwords с quanteda?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Опираясь на ответ @ phiver, это стандартный способ удаления определенных токенов в quanteda . Использовать stopwords() необязательно, поскольку вы предоставляете вектор токенов, которые необходимо удалить, а аргумент patterns может принимать вектор, но вместо этого используйте valuetype = 'fixed'.

Я использовал dplyr для удобочитаемости кода, но это не обязательно.

library(quanteda)
library(dplyr)
df <- data.frame(data = c("Here is an example text and why I write it", 
                          "I can explain and here you but I can help as I would like to help"),
                 stringsAsFactors = FALSE)

mystopwords <- c("is","an")
corpus <- 
  tokens(df$data,
         remove_punct = TRUE, 
         remove_numbers = TRUE, 
         remove_symbols = TRUE) %>%
  tokens_remove(pattern = mystopwords,
                valuetype = 'fixed') %>%
  dfm(ngrams = c(4,6))
0 голосов
/ 14 января 2019

Это будет работать. Сначала я добавил stringAsFactors = FALSE в data.frame. Текст, предоставленный tokens, должен быть символьным вектором, а не фактором. Затем я изменил remove = из вашего кода, потому что это должно быть pattern =. Наконец, часть ngram должна быть в функции dfm, а не в функции token_remove.

При вложении функций лучше отформатировать код немного больше. Немного лучше показывает, где могут быть допущены возможные ошибки.

library(quanteda)
df <- data.frame(data = c("Here is an example text and why I write it", 
                          "I can explain and here you but I can help as I would like to help"),
                 stringsAsFactors = FALSE)

mystopwords <- c("is","an")
corpus <- dfm(tokens_remove(tokens(df$data, 
                                   remove_punct = TRUE, 
                                   remove_numbers = TRUE, 
                                   remove_symbols = TRUE), 
                            pattern = c(stopwords(language = "el", source = "misc"), 
                                       mystopwords) 
                            ), 
              ngrams = c(4,6)
              )
...