R tm文本挖掘中的自冲突停用词

我正在清理文本挖掘的数据.这涉及删除数字,标点符号和停用词(在数据挖掘中只是噪声的常用词),以及后来的词干.

使用R中的tm包,您可以删除停用词,例如使用tm_map(myCorpus,removeWords,stopwords(‘english’)). tm手册本身演示了使用停用词(“英语”)).这个单词列表包含诸如“我”和“我将”之类的收缩,以及非常常见的单词“I”:

> library(tm)
> which(stopwords('english') == "i")
[1] 1
> which(stopwords('english') == "i'd")
[1] 69

(在删除停用词之前,文本被假定为小写.)

但是(据推测)因为“i”在列表中排在第一位,所以收缩从未被删除:

> removeWords("i'd like a soda, please", stopwords('english'))
[1] "'d like  soda, please"

快速破解是颠倒词汇表:

> removeWords("i'd like a soda, please", rev.default(stopwords('english')))
[1] " like  soda, please"

另一个解决方案是找到/制作更好的词表.

是否有更好/更正确的方法来使用停用词(‘english’)?

最佳答案 这里的问题来自您使用的工具所带来的欠定工作流程.简单地说,删除停用词意味着过滤令牌,但是你删除停用词的文本尚未被标记化.

具体来说,i是从我移除的,因为令牌器在撇号上分裂.在文本分析包quanteda中,您需要首先标记文本,然后才基于令牌匹配删除功能.例如:

require(quanteda)
removeFeatures(tokenize("i'd like a soda, please"), c("i'd", "a"))
# tokenizedText object from 1 document.
# Component 1 :
# [1] "like"   "soda"   ","      "please"

quanteda还有一个最常见的停用词的内置列表,所以这也有效(在这里,我们也删除了标点符号):

removeFeatures(tokenize("i'd like a soda, please", removePunct = TRUE),
               stopwords("english"))
# tokenizedText object from 1 document.
# Component 1 :
# [1] "like"   "soda"   "please"

在我看来(有抱负的,因为我设计了quanteda),这是一种更好的方法来删除英语和大多数其他语言的停用词.

点赞