2015-08-20 18 views
6

Aktualizacja Jak dokładnie usunąć interpunkcyjneprzy użyciu R z pakietem tm

myślę, że może mam obejście, aby rozwiązać ten problem, wystarczy dodać jeden kod: dtms = removeSparseTerms(dtm,0.1) Usunie rzadki znak w korpusie. Ale myślę, że to jest TYLKO obejście, wciąż czeka na odpowiedź ekspertów!


Ostatnio uczę się wydobywania tekstów w R przy użyciu pakietu tm. I mam pomysł, aby narysować chmurę słów na temat słów w moim programie ABAP w maksymalnej częstotliwości. Napisałem więc program R, aby to zrozumieć.

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) 

Ale w moim kodu ABAP, niektóre warianty zawierają „_” i „-” w nazwie wariantu, więc jeśli wykonywane to:

code = tm_map(code,removePunctuation) 

Zawartość corpus nie jest tak poprawny, a tym samym chmura słowa jest taka: enter image description here

Niektóre słowa są tak dziwne, jeśli usuniesz "_" lub "-".

I wtedy skomentować ten kod i Word chmura jest tak: enter image description here

Tym razem słowa są prawidłowe, ale jakiś niespodziewany charakter pojawił się, jak mój kod ABAP komentuję ...

Czy mamy więc jakieś metody, które dokładnie usuwają interpunkcje, których nie chcemy i zachowują te, które chcemy?

+0

Blisko duplikatu: [tm niestandardowy removePunctuation except hashtag] (http://stackoverflow.com/questions/27951377/tm-removepunctuation-except-hashtag) – smci

Odpowiedz

0

Ok ... więc następujące prace ... przekonwertować corpus w ramce danych, usunąć niechciane znaki, a następnie do przestawienia korpusu ...

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

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

4

Publikowanie jako odpowiedź na formatowanie kodu, ale jest to adaptacja z dokumentacji content_transformer znalezionej w getTransformtions w tm_map dokumentacja:

Głównie używa gsub w content_transformer zrobić to samo jak removePunctuation minus _ i - (klasa [:punct:] regex). removePunctuation ma opcję zachowania kresek -, ale nie po to, aby zachować podkreślenia _.

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

W klasie znaków trzeba uciec \ Z " i wspornik zamykający ].

Powiązane problemy