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

R-tm文本挖掘中的自冲突停止词,r,data-mining,text-mining,tm,R,Data Mining,Text Mining,Tm,我正在为文本挖掘清理数据。这包括删除数字、标点符号和停止词(在数据挖掘中只是噪音的常见词),然后再进行词干分析 使用R中的tm包,您可以删除停止词,例如使用tm\u映射(myCorpus,removeWords,stopwords('english'))。tm手册本身演示了如何使用stopwords(“英语”)。此词表包含诸如“I'd”和“I'll”等缩略词,以及非常常见的单词“I”: (在删除停止字之前,假定文本为小写。) 但是(大概)因为“i”排在列表的第一位,所以收缩永远不会被删除: &g

我正在为文本挖掘清理数据。这包括删除数字、标点符号和停止词(在数据挖掘中只是噪音的常见词),然后再进行词干分析

使用
R
中的
tm
包,您可以删除停止词,例如使用
tm\u映射(myCorpus,removeWords,stopwords('english'))
tm
手册本身演示了如何使用
stopwords(“英语”)
。此词表包含诸如“I'd”和“I'll”等缩略词,以及非常常见的单词“I”:

(在删除停止字之前,假定文本为小写。)

但是(大概)因为“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"
另一个解决方案是找到/制作一个更好的词表


有没有更好/正确的方法来使用stopwords(“英语”)?

这里的问题来自于您使用的工具可能导致的工作流程不确定。简单地说,删除停止词意味着过滤标记,但是您要从中删除停止词的文本尚未标记化

具体来说,
i
i'm
中删除,因为标记器在撇号上拆分。在文本分析包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还有一个内置的最常见的停止词列表,因此这也很有效(在这里,我们还删除了标点符号):

在我看来(不可否认,我设计了quanteda),这是删除英语和大多数其他语言中的停止词的更好方法

更新2021年1月,获取更现代的quanteda版本
require(“quanteda”)
##加载所需包:quanteda
##软件包版本:2.1.2
代币(“请给我一杯苏打水”)%>%
代币(c(“i'd”、“a”))
##由1个文档组成的令牌。
##正文1:
##[1]像“苏打水”、“请”
#或者使用停止词列表并删除标点符号
代币(“请给我一杯苏打水”,去掉_punt=TRUE)%>%
删除标记(停止字(“en”))
##由1个文档组成的令牌。
##正文1:
##[1]“像苏打水一样”

由(v1.0.0)创建于2021-02-01

您只能检查其中包含
的单词
删除单词(“请给我一杯苏打水”,grep(“”,stopwords(),value=TRUE))
谢谢@richard,这是一个很好的解决方法。没问题。我不确定使用
tm
软件包是否有其他“合适”的方法来实现这一点
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"
removeFeatures(tokenize("i'd like a soda, please", removePunct = TRUE),
               stopwords("english"))
# tokenizedText object from 1 document.
# Component 1 :
# [1] "like"   "soda"   "please"