2013-08-29 6 views
9

Próba wykonania analizy danych Twittera. Pobrano tweety i stworzyła corpus z tekstu tweets przy użyciu poniżejAnaliza danych na Twitterze - błąd w macierzy dokumentów terminowych

# Creating a Corpus 
wim_corpus = Corpus(VectorSource(wimbledon_text)) 

Próbując stworzyć TermDocumentMatrix jak poniżej, otrzymuję błąd i ostrzeżeń.

tdm = TermDocumentMatrix(wim_corpus, 
         control = list(removePunctuation = TRUE, 
             stopwords = TRUE, 
             removeNumbers = TRUE, tolower = TRUE)) 

Error in simple_triplet_matrix(i = i, j = j, v = as.numeric(v), nrow = length(allTerms), : 'i, j, v' different lengths 


In addition: Warning messages: 
1: In parallel::mclapply(x, termFreq, control) : 
all scheduled cores encountered errors in user code 
2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 
3: In TermDocumentMatrix.VCorpus(corpus) : invalid document identifiers 
4: In simple_triplet_matrix(i = i, j = j, v = as.numeric(v), nrow = length(allTerms), : 
NAs introduced by coercion 

Czy ktoś może wskazać, co ten błąd wskazuje? Czy może to być związane z pakietem tm?

Biblioteka tm została zaimportowana. Używam wersji R: R 3.0.1 i RStudio: 0.97

+0

Czy można odtworzyć ten błąd za pomocą małego pliku tekstowego (jakiś plik, który można udostępnić)? –

Odpowiedz

7

Myślę, że błąd wynika z niektórych "egzotycznych" znaków w wiadomościach tweet, których funkcja tm nie może obsłużyć. Mam ten sam błąd, używając tweetów jako źródła korpusu. Może następujące obejście pomaga:

# Czytając niektóre wiadomości tweet (tutaj z pliku tekstowego) do wektora

rawTweets <- readLines(con = "target_7_sample.txt", ok = TRUE, warn = FALSE, encoding = "utf-8") 

# przekonwertować tekst tweet wyraźnie w UTF-8

convTweets <- iconv(rawTweets, to = "utf-8") 

# Powyższa konwersja pozostawia wpisy wektorowe "NA", tj. Te tweety, których nie można obsłużyć. Wyjąć „NA” wpisy za pomocą następującego polecenia:

tweets <- (convTweets[!is.na(convTweets)]) 

Jeśli usunięcie niektórych tweets nie jest to problem dla rozwiązania (np zbudować chmurę słowo), to podejście może pracować, a można przejść przez wywołanie funkcji Corpus pakietu tm.

Pozdrawiam - Albert

12

miałem ten sam problem i okazuje się, że jest to kwestia kompatybilności z opakowania. Spróbuj zainstalować

install.packages("SnowballC") 

i obciążenia z

library(SnowballC) 

przed wywołaniem DocumentTermMatrix.

To rozwiązało mój problem.

+0

Czy możesz wyjaśnić, dlaczego to jest rozwiązanie? –

+0

Nie jestem pewien co do szczegółów problemu ze zgodnością. Czy może mieć coś wspólnego z ostatnią aktualizacją slam? Czy to nie zadziałało? – Guillaume

+0

dzięki człowiek. jesteś ratownikiem! – nutsiepully

3

Jak zasugerował Albert, konwersja kodowania tekstu na "utf-8" rozwiązała problem dla mnie. Ale zamiast usuwania całego tweet z problematycznych znaków, można użyć opcję sub w iconv tylko usunąć „złego” znaki tweet a resztę:

tweets <- iconv(rawTweets, to = "utf-8", sub="") 

nie produkują NAS już i nie jest konieczne dalsze filtrowanie.

0

Myślę, że ten problem występuje, ponieważ w tekście pojawiają się dziwne znaki.Oto moje rozwiązanie:

wim_corpus = tm_map(wim_corpus, str_replace_all,"[^[:alnum:]]", " ") 


tdm = TermDocumentMatrix(wim_corpus, 
         control = list(removePunctuation = TRUE, 
             stopwords = TRUE, 
             removeNumbers = TRUE, tolower = TRUE)) 
0

było kilka niemieckich liter umlaut i kilka specjalnych czcionek, które powodowały błędy. Nie mogłem ich usunąć w R .. nawet konwertując je na utf-8. (Jestem nowym użytkownikiem R) więc użyłem programu Excel do usuwania niemieckich liter, a następnie nie było żadnych błędów po ..

7

Znalazłem sposób na rozwiązanie tego problemu w artykule o TM.

Przykładem w której błąd następuje poniżej:

getwd() 
require(tm) 

# Importing files 
files <- DirSource(directory = "texts/",encoding ="latin1") 

# loading files and creating a Corpus 
corpus <- VCorpus(x=files) 

# Summary 

summary(corpus) 
corpus <- tm_map(corpus,removePunctuation) 
corpus <- tm_map(corpus,stripWhitespace) 
corpus <- tm_map(corpus,removePunctuation) 
matrix_terms <- DocumentTermMatrix(corpus) 
Warning messages: 
In TermDocumentMatrix.VCorpus(x, control) : invalid document identifiers 

Ten błąd występuje, ponieważ potrzebny jest obiekt klasy Vector Źródło zrobić swoją Term Document Matrix, ale poprzedni transformacje przekształcają twój korpus tekstów w charakter, zmieniając zatem klasę, która nie jest akceptowana przez funkcję.

Jednakże, jeśli dodasz jeszcze jedno polecenie przed użyciem funkcji TermDocumentMatrix, możesz kontynuować.

Poniżej następujący kod z nowym poleceniem:

getwd() 
require(tm) 

files <- DirSource(directory = "texts/",encoding ="latin1") 

# loading files and creating a Corpus 
corpus <- VCorpus(x=files) 

# Summary 
summary(corpus) 
corpus <- tm_map(corpus,removePunctuation) 
corpus <- tm_map(corpus,stripWhitespace) 
corpus <- tm_map(corpus,removePunctuation) 

# COMMAND TO CHANGE THE CLASS AND AVOID THIS ERROR 
corpus <- Corpus(VectorSource(corpus)) 
matriz_terms <- DocumentTermMatrix(corpus) 

Dlatego nie będzie miał więcej problemów z tym.

Powiązane problemy