Есть ли способ отфильтровать слова по длине в сумке слов матрицы в г? - PullRequest
0 голосов
/ 31 марта 2020

Я создал матрицу в R (называемую bag_of_words). Мне нужно вычислить 100 самых популярных слов (в большинстве случаев), но отфильтровать токены по длине (мин. Размер = 4 и макс. Размер = 20) и указать общее вхождение слов. Я создал код, чтобы найти 100 лучших слов без этого фильтра, который работает, но не может найти способ фильтрации слов в матрице по длине. Любая помощь будет оценена.

Моя попытка:

#view the top 100 most common words
term_f <- colSums(bag_of_words)
term_f <- sort(term_f, decreasing = T)
term_f[1:100]

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Может я не понял вашего вопроса. Но я думаю, что вектор может быть проще для обработки, особенно если это столбец data.table

library(data.table)
list_words <- data.table(x = as.numeric(bag_of_words))

Если вы хотите, чтобы слова были длиной от 4 до 20 символов, используйте nchar:

list_words <- list_words[nchar(x) %between% c(4,20)]

Подсчитать количество вхождений для каждого слова

list_words <- list_words[,.(n = .N), by = "x"]

Получить топ 100

list_words <- list_words[arrange(desc(n))][1:100]
0 голосов
/ 31 марта 2020

Я не уверен, какую инфраструктуру NLP вы используете, но я рекомендую использовать quanteda . Если у вас нет пакета, просто установите его из CRAN с помощью install.packages("quanteda").

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

library(quanteda)

text = c("some short tokens, but maybe just fine.",
         "thesearesomeverylongtokens.",
         "v e r y s hort tokens" )

mycorp = corpus( text )
mytok = tokens( mycorp )
my_selected_tok = tokens_keep( mytok, min_nchar = 4, max_nchar = 20 )

mydfm = dfm(my_selected_tok)
frequencies = textstat_frequency( mydfm )

> frequencies
  feature frequency rank docfreq group
1  tokens         2    1       2   all
2    some         1    2       1   all
3   short         1    2       1   all
4   maybe         1    2       1   all
5    just         1    2       1   all
6    fine         1    2       1   all
7    hort         1    2       1   all

> class(frequencies)
[1] "frequency"  "textstat"   "data.frame"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...