2016-09-19 5 views
2

Rでwordnetライブラリを使用し、コーパスの補題を得ることができました。以下は私が使ったコードです。Rでwordnetから得られたコーパスの補題を置換する方法

library(tm) 

doc1 <- "Stray cats are running all over the place. I see 10 a day!" 
doc2 <- "Cats are killers. They kill billions of animals a year." 
doc3 <- "The best food in Columbus, OH is the North Market." 
doc4 <- "Brand A is the best tasting cat food around. Your cat will love it." 
doc5 <- "Buy Brand C cat food for your cat. Brand C makes healthy and happy cats." 
doc6 <- "The Arnold Classic came to town this weekend. It reminds us to be healthy." 
doc7 <- "I have nothing to say. In summary, I have told you nothing." 


doc.list <- list(doc1, doc2, doc3, doc4, doc5, doc6, doc7) 

N.docs <- length(doc.list) 
names(doc.list) <- paste0("doc", c(1:N.docs)) 

query <- "Healthy cat food" 

my.docs <- VectorSource(c(doc.list, query)) 
my.docs$Names <- c(names(doc.list), "query") 

my.corpus <- Corpus(my.docs) 
my.corpus 

my.corpus <-tm_map(my.corpus,content_transformer(tolower)) 

#remove potentially problematic symbols 
toSpace <- content_transformer(function(x, pattern) { return (gsub(pattern, " ", x))}) 
removeSpecialChars <- function(x) gsub("[^a-zA-Z0-9 ]","",x) 
my.corpus <- tm_map(my.corpus, toSpace, "/") 
my.corpus <- tm_map(my.corpus, toSpace, "-") 
my.corpus <- tm_map(my.corpus, toSpace, ":") 
my.corpus <- tm_map(my.corpus, toSpace, ";") 
my.corpus <- tm_map(my.corpus, toSpace, "@") 
my.corpus <- tm_map(my.corpus, toSpace, "\\(") 
my.corpus <- tm_map(my.corpus, toSpace, ")") 
my.corpus <- tm_map(my.corpus, toSpace, ",") 
my.corpus <- tm_map(my.corpus, toSpace, "_") 
my.corpus <- tm_map(my.corpus, content_transformer(removeSpecialChars)) 
my.corpus <- tm_map(my.corpus, content_transformer(tolower)) 
my.corpus <- tm_map(my.corpus, removeWords, stopwords("en")) 
my.corpus <- tm_map(my.corpus, removePunctuation) 
my.corpus <- tm_map(my.corpus, stripWhitespace) 
my.corpus <- tm_map(my.corpus, removeNumbers) 
my.corpus <- tm_map(my.corpus, removeWords, c("status","please","need","mail", 
               "email","unable","re","fw","st","th","sep","nov","thank","kmmvlkm","prb")) 

#Stem document 
my.corpus <- tm_map(my.corpus,stemDocument) 

library(wordnet) 
setDict("C:/Program Files (x86)/WordNet/2.1/dict") 
initDict("C:/Program Files (x86)/WordNet/2.1/dict") 
lapply(my.corpus,function(x){ 
    sapply(unlist(strsplit(as.character(x),"[[:space:]]+")), function(word) { 
    x.filter <- getTermFilter("StartsWithFilter", word, TRUE) 
    terms <- getIndexTerms("NOUN",1,x.filter) 
    if(!is.null(terms)) sapply(terms,getLemma) 
    }) 
}) 

今、私は補題とコーパス内の単語を置き換えたいがWordNetのライブラリを使用してポストを受け、任意の誰もが解決策を取得する方法を知っている場合、それは大きな助けになります共有していただけます。

答えて

0

試してみてください、この1

**Output** <- lapply(my.corpus,function(x){ 
    sapply(unlist(strsplit(as.character(x),"[[:space:]]+")), function(word) { 
     x.filter <- getTermFilter("StartsWithFilter", word, TRUE) 
     terms <- getIndexTerms("NOUN",1,x.filter) 
     if(!is.null(terms)) sapply(terms,getLemma) 
     }) 
    }) 

出力はリストでなければなりません。そのリストをコーパスに変換する

cprs <- as.VCorpus(Output)  

次に、crpsをdtmに変換します。私はそれが願っています

関連する問題