2016-05-01 2 views
6

Я занимаюсь разработкой текста (PCA, HC, K-Means), и до сих пор мне удалось все правильно закодировать. Тем не менее, есть небольшой недостаток, который я хотел бы исправить.Исключительные слова с использованием пакета tm в R не работают должным образом?

Когда я пытаюсь остановить свой Корпус, он не работает должным образом, поскольку есть разные слова с одним и тем же радикалом, которые не определены правильно. Эти слова я особенно заинтересованы в (это на испанском языке, и они означают «дети» или связанных с ними):

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.

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ñ" 

против

# 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ñ" 

На мой взгляд, эта деталь не очевидна, и было бы неплохо, чтобы получить хотя бы предупреждение, когда stemDocument вызывается не-PlainTextDocument.

1

Я изменился с

corpus <- tm_map(corpus, tolower) 

в

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

, а затем stemDocument работал.

 Смежные вопросы

  • Нет связанных вопросов^_^