Счетчик ngram с пакетом tm в R

Я создал скрипт для частоты слов в документе, используя объект и словарь documentTermMatrix в R. Скрипт работает с отдельными словами, а не с составным словом es. "фу" "бар" "фу бар"

Это код

require(tm)
my.docs <- c("foo bar word1 word2")
myCorpus <- Corpus(VectorSource(my.docs))
inspect(DocumentTermMatrix(myCorpus,list(dictionary = c("foo","bar","foo bar"))))

Но результат

Terms

Docs bar foo  foo bar

   1   1   1        0

Мне нужно было найти один "foo bar" = 1

Как я могу это исправить?


person Rocco    schedule 05.11.2014    source источник


Ответы (1)


Проблема в том, что DocummentTermMatrix(...) по умолчанию использует разрывы слов. Вам нужны как минимум биграммы.

Благодарим этот пост за базовый подход.

library(tm)
library(RWeka)
my.docs <- c("foo bar word1 word2")
myCorpus <- Corpus(VectorSource(my.docs))
myDict   <- c("foo","bar","foo bar")
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 2))
inspect(DocumentTermMatrix(myCorpus, control=list(tokenize=BigramTokenizer,
                                                  dictionary=myDict)))
# <<DocumentTermMatrix (documents: 1, terms: 3)>>
# ...
#     Terms
# Docs bar foo foo bar
#    1   1   1       1
person jlhoward    schedule 05.11.2014