2016-05-01 16 views
6

私はいくつかのテキストマイニング(PCA、HC、K-Means)をやっていますが、これまではすべてを正しくコーディングすることができました。しかし、修正したい小さな欠陥があります。Rでtmパッケージを使用してステミングワードが正しく動作しませんか?

私はコーパスを踏みそそうとすると、適切な方法で識別されない同じラジカルの異なる単語が存在するため、コーパスが正しく機能しません。 は、これらの私が特に興味を持っている言葉です(それはスペイン語でだと、彼らは「子供」または関連を意味する):

niñera, niños, niñas, niña, niño 

をしかし、私は、コードを実行したときに、私はこれらの言葉はまだ

を除いて同一であることを取得します
niña, niño --> niñ 

しかし、他の人は同じままですので、私はniña/niñoのためだけに形づくっていますが、他の人はそうではありません。

これは、コーパスを作成するための私のコードです:

corp <- Corpus(DataframeSource(data.frame(x$service_name))) 
docs <- tm_map(corp, removePunctuation) 
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower) 
docs <- tm_map(docs, removeWords, stopwords("spanish")) 
docs <- tm_map(docs, stemDocument, language = "spanish") 
docs <- tm_map(docs, PlainTextDocument) 
dtm <- DocumentTermMatrix(docs) 
dtm 

私はいくつかの提案を本当に感謝します!

答えて

15

ステミング変換はPlainTextDocumentタイプにしか適用できないようです。 ? stemDocumentを参照してください。私の意見で

# WRONG 
sp.corpus = Corpus(VectorSource(c("la niñera. los niños. las niñas. la niña. el niño."))) 
docs <- tm_map(sp.corpus, removePunctuation) 
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower) 
docs <- tm_map(docs, removeWords, stopwords("spanish")) 
docs <- tm_map(docs, stemDocument, "spanish") # WRONG: apply PlainTextDocument first 
docs <- tm_map(docs, PlainTextDocument) 
print(docs[[1]]$content) 

# " niñera niños niñas niña niñ" 

sp.corpus = Corpus(VectorSource(c("la niñera. los niños. las niñas. la niña. el niño."))) 
docs <- tm_map(sp.corpus, removePunctuation) 
docs <- tm_map(docs, removeNumbers) 
docs <- tm_map(docs, tolower) 
docs <- tm_map(docs, removeWords, stopwords("spanish")) 
docs <- tm_map(docs, PlainTextDocument) # needs to come before stemming 
docs <- tm_map(docs, stemDocument, "spanish") 
print(docs[[1]]$content) 

# " niñer niñ niñ niñ niñ" 

が、この詳細は明らかではない、stemDocumentが非PlainTextDocumentに呼び出されたときに、少なくとも警告を受けるのはいいことです。

1

私が働いていた

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

corpus <- tm_map(corpus, tolower) 

から変更してからstemDocument

関連する問題