2015-08-26 6 views
8

मैं अपने द्वारा बनाए गए कॉर्पस से कुछ शब्दों को निकालने का प्रयास कर रहा हूं लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। मैं सबसे पहले सब कुछ के माध्यम से चलाता हूं और डेटाफ्रेम बनाता हूं जो मेरी आवृत्ति के क्रम में मेरे शब्दों को सूचीबद्ध करता है। मैं इस सूची का उपयोग उन शब्दों की पहचान करने के लिए करता हूं जिनमें मुझे रूचि नहीं है और फिर हटाए गए शब्दों के साथ एक नई सूची बनाने का प्रयास करें। हालांकि, शब्द मेरे डेटासेट में रहते हैं। मैं सोच रहा हूं कि मैं क्या गलत कर रहा हूं और क्यों शब्दों को हटाया नहीं जा रहा है? मैं पूर्ण नीचे दिए गए कोड को शामिल किया है:आर tm removeWords फ़ंक्शन शब्द को हटाने नहीं

install.packages("rvest") 
install.packages("tm") 
install.packages("SnowballC") 
install.packages("stringr") 
library(stringr) 
library(tm) 
library(SnowballC) 
library(rvest) 

# Pull in the data I have been using. 
paperList <- html("http://journals.plos.org/plosone/search?q=nutrigenomics&sortOrder=RELEVANCE&filterJournals=PLoSONE&resultsPerPage=192") 
paperURLs <- paperList %>% 
    html_nodes(xpath="//*[@class='search-results-title']/a") %>% 
    html_attr("href") 
paperURLs <- paste("http://journals.plos.org", paperURLs, sep = "") 
paper_html <- sapply(1:length(paperURLs), function(x) html(paperURLs[x])) 

paperText <- sapply(1:length(paper_html), function(x) paper_html[[1]] %>% 
         html_nodes(xpath="//*[@class='article-content']") %>% 
         html_text() %>% 
         str_trim(.)) 
# Create corpus 
paperCorp <- Corpus(VectorSource(paperText)) 
for(j in seq(paperCorp)) 
{ 
    paperCorp[[j]] <- gsub(":", " ", paperCorp[[j]]) 
    paperCorp[[j]] <- gsub("\n", " ", paperCorp[[j]]) 
    paperCorp[[j]] <- gsub("-", " ", paperCorp[[j]]) 
} 

paperCorp <- tm_map(paperCorp, removePunctuation) 
paperCorp <- tm_map(paperCorp, removeNumbers) 

paperCorp <- tm_map(paperCorp, removeWords, stopwords("english")) 

paperCorp <- tm_map(paperCorp, stemDocument) 

paperCorp <- tm_map(paperCorp, stripWhitespace) 
paperCorpPTD <- tm_map(paperCorp, PlainTextDocument) 

dtm <- DocumentTermMatrix(paperCorpPTD) 

termFreq <- colSums(as.matrix(dtm)) 
head(termFreq) 

tf <- data.frame(term = names(termFreq), freq = termFreq) 
tf <- tf[order(-tf[,2]),] 
head(tf) 

# After having identified words I am not interested in 
# create new corpus with these words removed. 
paperCorp1 <- tm_map(paperCorp, removeWords, c("also", "article", "Article", 
               "download", "google", "figure", 
               "fig", "groups","Google", "however", 
               "high", "human", "levels", 
               "larger", "may", "number", 
               "shown", "study", "studies", "this", 
               "using", "two", "the", "Scholar", 
               "pubmedncbi", "PubMedNCBI", 
               "view", "View", "the", "biol", 
               "via", "image", "doi", "one", 
               "analysis")) 

paperCorp1 <- tm_map(paperCorp1, stripWhitespace) 
paperCorpPTD1 <- tm_map(paperCorp1, PlainTextDocument) 
dtm1 <- DocumentTermMatrix(paperCorpPTD1) 
termFreq1 <- colSums(as.matrix(dtm1)) 
tf1 <- data.frame(term = names(termFreq1), freq = termFreq1) 
tf1 <- tf1[order(-tf1[,2]),] 
head(tf1, 100) 

आप tf1 के माध्यम से देखें, तो आप शब्द, जिसे निकाला जाना वास्तव में हटाया नहीं किया गया है निर्दिष्ट किया गया है कि बहुत सारे देखेंगे।

बस सोच रहा है कि मैं क्या गलत कर रहा हूं, और मैं इन शब्दों को अपने डेटा से कैसे हटा सकता हूं?

नोट: removeWords कुछ कर रहा है क्योंकि head(tm, 100) और head(tm1, 100) से आउटपुट बिल्कुल समान नहीं है। तो removeWords उन शब्दों के कुछ उदाहरणों को हटाने का प्रतीत होता है जिन्हें मैं छुटकारा पाने की कोशिश कर रहा हूं, लेकिन सभी उदाहरण नहीं।

+2

आपके कोड में एक टाइपो है। 'paperCorp1 <- tm_map (paperCorp, removeWords, c ("the")) 'paperCorp1 होना चाहिए <- tm_map (paperCorp1, removeWords, c (" the "))' – phiver

+0

हाय @ फिवर, इसे चुनने के लिए धन्यवाद। मैंने गलती से उस समय से छोड़ा जब मैं समस्या का पता लगाने की कोशिश कर रहा था। कोड की उस पंक्ति को हटाने के बाद भी मुझे एक ही समस्या है। "मैं" सहित कई शब्दों को हटाने का प्रयास कर रहा हूं, अभी भी 'tf1' में हैं। – Adam

+0

यह अपरकेस शब्दों के कारण हो सकता है। आज़माएं: 'paperCorp <- tm_map (paperCorp, tolower) ' – scoa

उत्तर

13

मैंने कुछ कोड को चारों ओर स्विच किया और धीरे-धीरे जोड़ा। स्टॉपवर्ड सभी लोअरकेस में हैं, इसलिए आपको स्टॉपवर्ड को हटाने से पहले इसे पहले करना होगा।

paperCorp <- tm_map(paperCorp, removePunctuation) 
paperCorp <- tm_map(paperCorp, removeNumbers) 
# added tolower 
paperCorp <- tm_map(paperCorp, tolower) 
paperCorp <- tm_map(paperCorp, removeWords, stopwords("english")) 
# moved stripWhitespace 
paperCorp <- tm_map(paperCorp, stripWhitespace) 

paperCorp <- tm_map(paperCorp, stemDocument) 

ऊपरी केस शब्दों की अब आवश्यकता नहीं है, क्योंकि हम सबकुछ कम मामले में सेट करते हैं। आप इन्हें हटा सकते हैं।

paperCorp <- tm_map(paperCorp, removeWords, c("also", "article", "Article", 
               "download", "google", "figure", 
               "fig", "groups","Google", "however", 
               "high", "human", "levels", 
               "larger", "may", "number", 
               "shown", "study", "studies", "this", 
               "using", "two", "the", "Scholar", 
               "pubmedncbi", "PubMedNCBI", 
               "view", "View", "the", "biol", 
               "via", "image", "doi", "one", 
               "analysis")) 

paperCorpPTD <- tm_map(paperCorp, PlainTextDocument) 

dtm <- DocumentTermMatrix(paperCorpPTD) 

termFreq <- colSums(as.matrix(dtm)) 
head(termFreq) 

tf <- data.frame(term = names(termFreq), freq = termFreq) 
tf <- tf[order(-tf[,2]),] 
head(tf) 

      term freq 
fatty  fatty 29568 
pparα  ppara 23232 
acids  acids 22848 
gene  gene 15360 
dietary dietary 12864 
scholar scholar 11904 

tf[tf$term == "study"] 


data frame with 0 columns and 1659 rows 

और जैसा कि आप देख सकते हैं, परिणाम यह है कि अध्ययन अब कॉर्पस में नहीं है। शब्द के बाकी भी

5

कोई मुझे पसंद है और इसके बाद के संस्करण समाधान अभी भी काम नहीं करता है, कोशिश उपयोग त्रुटि हो जाता है चले गए हैं: paperCorp <- tm_map(paperCorp, content_transformer(tolower)) बजाय paperCorp <- tm_map(paperCorp, tolower) क्योंकि tolower() आधार पैकेज से एक समारोह है और विभिन्न संरचना देता है (मेरा मतलब है परिणाम प्रकार में कुछ बदलता है) ताकि आप उदाहरण के लिए paperCorp[[j]]$content का उपयोग नहीं कर सकें, लेकिन केवल paperCorp[[j]]। यह सिर्फ एक digression है, शायद किसी के लिए हानिकारक।

संबंधित मुद्दे