2015-08-20 10 views
6

Update mit R:Wie genau die Interpunktion entfernen, wenn sie mit tm Paket

Ich glaube, ich eine Abhilfe Um dieses Problem zu lösen, haben kann, nur einen Code hinzuzufügen: dtms = removeSparseTerms(dtm,0.1) Es wird die spärlichen Zeichen im Korpus zu entfernen. Aber ich denke, das ist NUR ein Workaround, warten Sie immer noch auf die Antwort der Experten!


Kürzlich lerne ich Text Mining in R mit tm-Paket. Und ich habe eine Idee, eine Wortwolke über die Wörter in meinem ABAP-Programm in maximaler Häufigkeit zu zeichnen. Also habe ich ein R-Programm geschrieben, um dies zu realisieren.

library(tm) 
library(SnowballC) 
library(wordcloud) 

# set path 
path = system.file("texts","abapcode",package = "tm") 

# make corpus 
code = Corpus(DirSource(path),readerControl = list(language = "en")) 

# cleanse text 
code = tm_map(code,stripWhitespace) 
code = tm_map(code,removeWords,stopwords("en")) 
code = tm_map(code,removePunctuation) 
code = tm_map(code,removeNumbers) 

# make DocumentTermMatrix 
dtm = DocumentTermMatrix(code) 

#freqency 
freq = sort(colSums(as.matrix(dtm)),decreasing = T) 

#wordcloud(code,scale = c(5,1),max.words = 50,random.order = F,colors = brewer.pal(8, "Dark2"),rot.per = 0.35,use.r.layout = F) 
wordcloud(names(freq),freq,scale = c(5,1),max.words = 50,random.order = F,colors = brewer.pal(8, "Dark2"),rot.per = 0.35,use.r.layout = F) 

Aber in meinem ABAP-Code, enthalten einige Varianten "_" und "-" in der Variante Namen, also wenn ich dies ausgeführt:

code = tm_map(code,removePunctuation) 

Der Korpus Inhalt ist nicht so richtig und so die Wortwolke ist wie folgt: enter image description here

Einige Wörter sind so merkwürdig, wenn Sie "_" oder "-" entfernen.

Und dann kommentieren ich diesen Code und das Wort Wolke ist wie folgt: enter image description here

Dieses Mal sind die Worte sind korrekt, aber einige unerwartete Zeichen tauchte, wie mein ABAP-Code commet ...

Haben wir also einige Methoden, mit denen wir die Interpunktion, die wir nicht wollen, genau entfernen und die gewünschten beibehalten können?

+0

Near-Duplikat: [tm benutzerdefinierte removePunctuation außer Hashtag] (http://stackoverflow.com/questions/27951377/tm-removepuptuation-except-hashtag) – smci

Antwort

0

Ok ... so dass die folgenden Werke ... umrechnen Korpus in einen Datenrahmen, entfernen Sie die unerwünschten Zeichen und anschließend auf corpus zurückzuverwandeln ...

dataframe<-data.frame(text=unlist(sapply(code, [, "content")), stringsAsFactors=F) dataframe$text <- gsub("[][!#$%()*,.:;<=>@^_|~.{}]", "", dataframe$text)

code <- corpus(Vectorsource(dataframe$text))

4

Buchung als Antwort für die Code-Formatierung, aber es ist eine Anpassung aus der Dokumentation von content_transformer gefunden von getTransformtions ingefunden 0 Dokumentation:

Vor allem ist es gsub in einem content_transformer unter Verwendung des gleichen wie removePunctuation minus _ und - (die [:punct:] Regex-Klasse) zu tun. removePunctuation hat eine Option, um Bindestriche - zu behalten, aber Unterstriche _ nicht zu behalten.

f <- content_transformer(function(x, pattern) gsub(pattern, "", x)) 
code <- tm_map(code, f, "[!\"#$%&'*+,./)(:;<=>[email protected]\][\\^`{|}~]") 

In der Zeichenklasse müssen Sie den \ entkommen, die " und der Schließbügel ].

Verwandte Themen