2014-11-05 2 views
4

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

Это код

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 бар" = 1

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

ответ

4

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

Кредит this post для базового подхода.

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