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 文本挖掘中的自冲突停用词的主要内容,如果未能解决你的问题,请参考以下文章