【问题标题】:Remove meaningless words from corpus in R从R中的语料库中删除无意义的单词
【发布时间】:2017-06-01 12:43:41
【问题描述】:

我正在使用tmwordcloud 在 R 中执行一些基本的文本挖掘。正在处理的文本包含许多无意义的单词,例如 asfdg、aawptkr,我需要过滤这些单词。 我找到的最接近的解决方案是使用library(qdapDictionaries) 并构建一个自定义函数来检查单词的有效性。

library(qdapDictionaries)
is.word  <- function(x) x %in% GradyAugmented

# example
> is.word("aapg")
[1] FALSE

剩下的文本挖掘使用的是:

curDir <- "E:/folder1/"  # folder1 contains a.txt, b.txt
myCorpus <- VCorpus(DirSource(curDir))
myCorpus <- tm_map(myCorpus, removePunctuation)
myCorpus <- tm_map(myCorpus, removeNumbers)

myCorpus <- tm_map(myCorpus,foo) # foo clears meaningless words from corpus

问题是is.word() 可以很好地处理数据帧,但如何将其用于corpus 处理?

谢谢

【问题讨论】:

  • 你好检查content_transformer这是你需要的
  • @s.brunel, content_transformer 与修改语料库的函数一起使用,is.word 只是返回 True / False

标签: r tm


【解决方案1】:

如果您愿意尝试不同的文本挖掘包,那么这将起作用:

library(readtext)
library(quanteda)
myCorpus <- corpus(readtext("E:/folder1/*.txt"))

# tokenize the corpus
myTokens <- tokens(myCorpus, remove_punct = TRUE, remove_numbers = TRUE)
# keep only the tokens found in an English dictionary
myTokens <- tokens_select(myTokens, names(data_int_syllables))

您可以从那里形成文档术语矩阵(在 quanteda 中称为“dfm”)进行分析,它只会包含在字典中匹配的英语术语的特征(包含大约 130,000 个单词) .

【讨论】:

  • 感谢@Ken 的帮助,我查找了quanteda 并减少了一些数据,而不是考虑所有单词来加快进程
【解决方案2】:

不确定它是否是最节省资源的方法(我不太了解这个包),但它应该可以工作:

tdm <- TermDocumentMatrix(myCorpus )
all_tokens       <- findFreqTerms(tdm, 1)
tokens_to_remove <- setdiff(all_tokens,GradyAugmented)
corpus <- tm_map(corpus, content_transformer(removeWords), 
                 tokens_to_remove)

【讨论】:

  • 感谢@Moody 的回复,它在一定程度上过滤掉了单词。
  • 某种程度上?也许确保两边都是小写
  • 是的,谢谢,我在这些步骤之前应用了一些转换,一切正常。唯一的问题是资源消耗。
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多