Цель: я хочу создать матрицу термин-документ, используя словарь, который содержит составные слова или биграммы, как некоторые из ключевых слов.
Поиск в Интернете: будучи новичком в области интеллектуального анализа текста и пакета tm
в R
, я пошел в Интернет, чтобы выяснить, как это сделать. Ниже приведены некоторые ссылки, которые я нашел:
- Часто задаваемые вопросы на веб-сайте tm-package
- поиск фраз из 2 и 3 слов с помощью пакета r tm
- счетчик ngram с пакетом tm в r
- findassocs для нескольких терминов в r
Предпосылки: из них я предпочел решение, в котором используется NGramTokenizer
в RWeka
пакете в R
, но я столкнулся с проблемой. В приведенном ниже примере кода я создаю три документа и помещаю их в корпус. Обратите внимание, что Docs 1
и 2
содержат по два слова. Doc 3
содержит только одно слово. Ключевые слова моего словаря - это две биграммы и униграмма.
Проблема: Решение NGramTokenizer
в приведенных выше ссылках неправильно подсчитывает ключевое слово unigram в Doc 3
.
library(tm)
library(RWeka)
my.docs = c('jedi master', 'jedi grandmaster', 'jedi')
my.corpus = Corpus(VectorSource(my.docs))
my.dict = c('jedi master', 'jedi grandmaster', 'jedi')
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 2))
inspect(DocumentTermMatrix(my.corpus, control=list(tokenize=BigramTokenizer,
dictionary=my.dict)))
# <<DocumentTermMatrix (documents: 3, terms: 3)>>
# ...
# Docs jedi jedi grandmaster jedi master
# 1 1 0 1
# 2 1 1 0
# 3 0 0 0
Я ожидал, что строка для Doc 3
даст 1
для jedi
и 0
для двух других. Я что-то недопонимаю?