2015-08-20 13 views
6

Cập nhật:Làm thế nào để loại bỏ hoàn toàn dấu chấm câu khi sử dụng R với gói tm

Tôi nghĩ rằng tôi có thể có một cách giải quyết để giải quyết vấn đề này, chỉ cần thêm một mã: dtms = removeSparseTerms(dtm,0.1) Nó sẽ loại bỏ các nhân vật thưa thớt trong corpus. Nhưng tôi nghĩ rằng đây chỉ là một cách giải quyết, vẫn chờ đợi câu trả lời của các chuyên gia!


Gần đây tôi đang học khai thác văn bản trong R bằng gói tm. Và tôi có ý tưởng vẽ một đám mây từ về các từ trong chương trình ABAP của tôi ở tần số tối đa. Vì vậy, tôi đã viết một chương trình R để nhận ra điều này.

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) 

Nhưng trong mã ABAP của tôi, một số biến thể chứa "_" và "-" trong tên biến, vì vậy nếu tôi thực hiện điều này:

code = tm_map(code,removePunctuation) 

Nội dung corpus không phải là quá chính xác và do đó từ đám mây giống như sau: enter image description here

Một số từ quá lạ nếu xóa "_" hoặc "-".

Và sau đó tôi nhận xét rằng mã và đám mây từ là như thế này: enter image description here

Lần này những lời là chính xác nhưng một số nhân vật bất ngờ xuất hiện bất ngờ, chẳng hạn như ABAP đang commet của tôi ...

Vì vậy, chúng tôi có một số phương pháp có thể chính xác loại bỏ dấu câu mà chúng tôi không muốn và giữ những người chúng ta muốn?

+0

Gần trùng lặp: [tm custom removeCâu lệnh ngoại trừ hashtag] (http://stackoverflow.com/questions/27951377/tm-removepunctuation-except-hashtag) – smci

Trả lời

0

Ok ... do đó các công việc sau ... Chuyển đổi corpus vào một khung dữ liệu, loại bỏ các ký tự không mong muốn và sau đó reconvert để corpus ...

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

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

4

Đăng dưới dạng câu trả lời cho định dạng mã, nhưng đó là một sự thích nghi từ tài liệu của content_transformer được tìm thấy từ getTransformtions được tìm thấy trong tm_map tài liệu:

Chủ yếu nó được sử dụng trong một gsubcontent_transformer để làm tương tự như removePunctuation trừ _- (lớp [:punct:] regex). removePunctuation có tùy chọn để giữ dấu gạch ngang - nhưng không giữ dấu gạch dưới _.

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

Trong lớp nhân vật bạn phải thoát khỏi \, các " và khung đóng ].

Các vấn đề liên quan