2013-07-17 9 views
16

Znalazłem sposób użycia bigrams zamiast pojedynczych tokenów w macierzy term-document. Rozwiązanie zostało postawione na stackoverflow tutaj: findAssocs for multiple terms in Rbigrams zamiast pojedynczych słów w macierzy termdocument przy użyciu R i Rweka

Pomysł wychodzi coś takiego:

library(tm) 
library(RWeka) 
data(crude) 

#Tokenizer for n-grams and passed on to the term-document matrix constructor 
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2)) 
txtTdmBi <- TermDocumentMatrix(crude, control = list(tokenize = BigramTokenizer)) 

Jednak ostateczna linia daje mi błąd:

Error in rep(seq_along(x), sapply(tflist, length)) : 
    invalid 'times' argument 
In addition: Warning message: 
In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 

Jeśli usunąć tokenizera od w ostatniej linii tworzy regularne tdm, więc domyślam się, że problem tkwi gdzieś w funkcji BigramTokenizer, chociaż jest to ten sam przykład, który podaje strona Weka: http://tm.r-forge.r-project.org/faq.html#Bigrams.

+0

To działa dobrze dla mnie; Nie mogę odtworzyć Twojego komunikatu o błędzie. Możesz spróbować zaktualizować swoje pakiety i R, aby upewnić się, że używasz najnowszej wersji wszystkiego. – Ben

+0

Jeszcze raz dziękuję za radę. Nadal dostaję komunikat o błędzie po sprawdzeniu mojej wersji R i update.packages. Zastanawiam się, czy jest to problem z os, ponieważ często napotykam na problemy z Javą w systemie OS X, więc może to wpływa na Weka? Spróbuję na moim komputerze z systemem Windows. Spróbuję też: http://stackoverflow.com/questions/8898521/finding-2-3-word-phrases-using-r-tm-package – ds10

+0

Tak, następnym krokiem jest upewnienie się, że twoja instalacja Java wszystko jest w porządku (a to może być dość frustrujące!). Nie używam OSX, może nie jest tak źle, ale Windows nie ułatwia ... – Ben

Odpowiedz

31

Zainspirowany komentarzem Antoniego, okazało się, że można określić liczbę wątków, że biblioteka parallel używa domyślnie (podać go przed wywołaniem NgramTokenizer):

# Sets the default number of threads to use 
options(mc.cores=1) 

Ponieważ NGramTokenizer wydaje się powiesić na wywołanie parallel::mclapply, zmiana liczby wątków wydaje się działać wokół niego.

+1

Sprawił, że działa na moim OSX dzięki temu rozwiązaniu, dzięki! –

+0

Nie doświadczyłem problemu, ale w Shinyapps.io. To rozwiązało problem. Dzięki! – jadianes

5

Wydaje się, że istnieją problemy z zastosowaniem RWeka z równolegle opakowania. Znalazłem obejście rozwiązanie here.

The most important point is not loading the RWeka package and use the namespace in a encapsulated function.

Więc tokenizer powinien wyglądać

BigramTokenizer <- function(x) {RWeka::NGramTokenizer(x, RWeka::Weka_control(min = 2, max = 2))} 
+0

Czy istnieje alternatywa dla NGramTokenizer? Na moim komputerze RWeka nie działa z powodu problemów z wersją R/Java. – harsha

+0

http://text2vec.org –