在 R 中使用 tm 包进行词干提取无法正常工作?
Stemming words using tm package in R does not work properly?
我正在做一些文本挖掘(PCA、HC、K-Means),到目前为止我已经成功地编写了所有正确的代码。但是,我想修复一个小缺陷。
当我试图阻止我的 Corpus 时,它无法正常工作,因为有不同的单词具有相同的部首,但没有以正确的方式识别。
这些是我特别感兴趣的词(它是西班牙语,意思是 "kids" 或相关):
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
我非常感谢您提出一些建议!
谢谢
词干转换似乎只能应用于 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ñ"
在我看来,这个细节并不明显,如果在非 PlainTextDocument 上调用 stemDocument 时至少得到一个警告就好了。
我从
corpus <- tm_map(corpus, tolower)
到
corpus <- tm_map(corpus, content_transformer(tolower))
然后 stemDocument
起作用了。
我正在做一些文本挖掘(PCA、HC、K-Means),到目前为止我已经成功地编写了所有正确的代码。但是,我想修复一个小缺陷。
当我试图阻止我的 Corpus 时,它无法正常工作,因为有不同的单词具有相同的部首,但没有以正确的方式识别。 这些是我特别感兴趣的词(它是西班牙语,意思是 "kids" 或相关):
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
我非常感谢您提出一些建议! 谢谢
词干转换似乎只能应用于 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ñ"
在我看来,这个细节并不明显,如果在非 PlainTextDocument 上调用 stemDocument 时至少得到一个警告就好了。
我从
corpus <- tm_map(corpus, tolower)
到
corpus <- tm_map(corpus, content_transformer(tolower))
然后 stemDocument
起作用了。