2016-05-30 12 views
3

Ich habe eine Reihe von Dokumenten:Entfernen von Stoppwörtern eines benutzerdefinierten Korpus in R

documents = c("She had toast for breakfast", 
"The coffee this morning was excellent", 
"For lunch let's all have pancakes", 
"Later in the day, there will be more talks", 
"The talks on the first day were great", 
"The second day should have good presentations too") 

In dieser Reihe von Dokumenten, würde Ich mag die Stoppwörter zu entfernen. Ich habe bereits entfernt Zeichensetzung und Kleinbuchstaben umgewandelt, mit:

documents = tolower(documents) #make it lower case 
documents = gsub('[[:punct:]]', '', documents) #remove punctuation 

Zuerst habe ich zu einem Corpus Objekt konvertieren:

documents <- Corpus(VectorSource(documents)) 

Dann versuche ich die Stoppwörter zu entfernen:

documents = tm_map(documents, removeWords, stopwords('english')) #remove stopwords 

Diese letzte Zeile führt jedoch zu folgendem Fehler:

THE_P ROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC() zu debuggen.

Dies wurde bereits here gestellt, aber eine Antwort wurde nicht gegeben. Was bedeutet dieser Fehler?

EDIT

Ja, ich tm Paket verwenden. Hier

ist der Ausgang der Session():

R Version 3.0.2 (2013.09.25) Plattform: x86_64-Apfel-darwin10.8.0 (64-Bit)

Antwort

5

Wenn ich in tm Probleme laufen oft ich nur den ursprünglichen Text Bearbeitung beenden.

Zum Entfernen von Wörtern ist es ein wenig peinlich, aber Sie können eine Regex aus tm 's Stoppwortliste einfügen.

stopwords_regex = paste(stopwords('en'), collapse = '\\b|\\b') 
stopwords_regex = paste0('\\b', stopwords_regex, '\\b') 
documents = stringr::str_replace_all(documents, stopwords_regex, '') 

> documents 
[1] "  toast breakfast"    " coffee morning excellent"  
[3] " lunch lets pancakes"   "later day will talks"   
[5] " talks first day great"   " second day good presentations " 
+0

Vielen Dank für Ihre Antwort. Ich bekomme den Fehler 'string muss ein atomarer Vektor sein' in der Zeile mit stringr :: str_replace_all. Irgendeine Idee, wie man das anpackt? – StatsSorceress

+0

Aha! Gerade beantwortet meine eigene Frage: documents1 = einfügen (c (Dokumente)) Fügen Sie diese Zeile kurz vor dem Abschnitt von stopwords_regex. Danke nochmal! – StatsSorceress

0

Vielleicht versuchen Verwenden Sie die tm_map Funktion, um das Dokument zu transformieren. Es scheint in meinem Fall zu funktionieren.

> documents = c("She had toast for breakfast", 
+ "The coffee this morning was excellent", 
+ "For lunch let's all have pancakes", 
+ "Later in the day, there will be more talks", 
+ "The talks on the first day were great", 
+ "The second day should have good presentations too") 
> library(tm) 
Loading required package: NLP 
> documents <- Corpus(VectorSource(documents)) 
> documents = tm_map(documents, content_transformer(tolower)) 
> documents = tm_map(documents, removePunctuation) 
> documents = tm_map(documents, removeWords, stopwords("english")) 
> documents 
<<VCorpus>> 
Metadata: corpus specific: 0, document level (indexed): 0 
Content: documents: 6 

Dies ergibt

> documents[[1]]$content 
[1] " toast breakfast" 
> documents[[2]]$content 
[1] " coffee morning excellent" 
> documents[[3]]$content 
[1] " lunch lets pancakes" 
> documents[[4]]$content 
[1] "later day will talks" 
> documents[[5]]$content 
[1] " talks first day great" 
> documents[[6]]$content 
[1] " second day good presentations " 
+0

Dank Elyasin, aber ich bin schon tm Paket verwenden, und es ist tm_map (Dokumente, removeWords, Stoppwörter ("Englisch")), die den Fehler wirft. – StatsSorceress

+0

Ich weiß. Aber sehen Sie sich meine Antwort genauer an. Ich bekam ein vernünftiges Ergebnis und der Befehl war 'Dokumente = tm_map (Dokumente, content_transformer (tolower))', bevor Satzzeichen entfernt und Wörter gestoppt wurden. Versuch es. – Elyasin

+0

Ich schaute wieder, und es scheint, ich kann tm_map überhaupt nicht verwenden. Manchmal gibt es keine Fehler und ich kann die Stoppwörter über Ihre Methode entfernen, aber manchmal gibt es den gleichen Fehler ('der Prozess hat sich verzweigt ...'). Ich hatte noch nie so einen intermittierenden Fehler. Irgendwelche Ideen? – StatsSorceress

0

können Sie quanteda Paket verwenden Stoppwörter zu entfernen, aber zuerst Ihre Worte sind Token stellen Sie sicher, und verwenden Sie dann die folgenden Schritte aus:

library(quanteda) 
x<- tokens_select(x,stopwords(), selection=) 
Verwandte Themen