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

Posted

技术标签:

【中文标题】R tm 文本挖掘中的自冲突停用词【英文标题】:Self-conflicting stopwords in R tm text mining 【发布时间】:2015-01-10 01:34:39 【问题描述】:

我正在清理用于文本挖掘的数据。这涉及删除数字、标点符号和停用词(在数据挖掘中只是噪音的常用词),然后进行词干提取。

使用R 中的tm 包,您可以删除停用词,例如使用tm_map(myCorpus, removeWords, stopwords('english'))tm 手册本身演示了如何使用 stopwords("english"))。此单词列表包含诸如“I'd”和“I'll”之类的缩写,以及非常常见的单词“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')?

【问题讨论】:

你只能检查带有'的单词removeWords("i'd like a soda, please", grep("'", stopwords(), value=TRUE)) 感谢@richard,这是一个很好的解决方法。 没问题。我不确定还有其他“正确”的方法可以使用 tm 【参考方案1】:

这里的问题来自于您使用的工具导致的工作流程不确定。简单来说,去除停用词就是过滤标记,但是你要去除停用词的文本还没有被标记化。

具体来说,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 还内置了最常见的停用词列表,因此也可以使用(在这里,我们还删除了标点符号):

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

在我看来(这是有偏见的,诚然,因为我设计了 quanteda),这是删除英语和大多数其他语言中停用词的更好方法。

2021 年 1 月更新,以获得更现代的 quanteda 版本

require("quanteda")
## Loading required package: quanteda
## Package version: 2.1.2

tokens("i'd like a soda, please") %>%
  tokens_remove(c("i'd", "a"))
## Tokens consisting of 1 document.
## text1 :
## [1] "like"   "soda"   ","      "please"

# or using the stopwords list and removing punctuation
tokens("i'd like a soda, please", remove_punct = TRUE) %>%
  tokens_remove(stopwords("en"))
## Tokens consisting of 1 document.
## text1 :
## [1] "like"   "soda"   "please"

由reprex package (v1.0.0) 于 2021 年 2 月 1 日创建

【讨论】:

以上是关于R tm 文本挖掘中的自冲突停用词的主要内容,如果未能解决你的问题,请参考以下文章

R语言 数据挖掘-文本分析(1)

R文本挖掘之tm包

r 使用包“tm”(文本挖掘)在R中的tfidf

R语言文本挖掘

使用 R 进行文本挖掘来计算单词的频率

R语言 | 手把手教你做文本挖掘!