Quanteda:如何删除我自己的单词列表

时间:2017-07-26 12:51:38

标签: r text-mining quanteda

由于在quanteda中没有为波兰语准备好停用词,我想使用自己的列表。我把它作为一个由空格分隔的列表在文本文件中。如果需要,我也可以准备一个由新行分隔的列表。

如何从语料库中删除自定义的长字停用词列表? 在干预之后我该怎么做?

我尝试过创建各种格式,转换为

等字符串向量
stopwordsPL <- as.character(readtext("polish.stopwords.txt",encoding = "UTF-8"))
stopwordsPL <- read.txt("polish.stopwords.txt",encoding = "UTF-8",stringsAsFactors = F))
stopwordsPL <- dictionary(stopwordsPL)

我也尝试在语法

中使用这样的单词向量
myStemMat <-
  dfm(
    mycorpus,
    remove = as.vector(stopwordsPL),
    stem = FALSE,
    remove_punct = TRUE,
    ngrams=c(1,3)
  )

dfm_trim(myStemMat, sparsity = stopwordsPL)

myStemMat <- dfm_remove(myStemMat,features = as.data.frame(stopwordsPL))

没有任何作用。我的词汇出现在语料库和分析中。应用自定义停用词的正确方法/语法应该是什么?

1 个答案:

答案 0 :(得分:8)

假设您的polish.stopwords.txtthis类似,那么您应该可以通过这种方式将其从语料库中删除:

stopwordsPL <- readLines("polish.stopwords.txt", encoding = "UTF-8")

dfm(mycorpus,
    remove = stopwordsPL,
    stem = FALSE,
    remove_punct = TRUE,
    ngrams=c(1,3))

使用 readtext 的解决方案无效,因为它将整个文件作为一个文档读取。要获得单个单词,您需要对其进行标记并将标记强制转换为字符。可能readLines()更容易。

无需从stopwordsPL创建字典,因为remove应该使用字符向量。此外,我担心还没有实施波兰干扰器。

目前(v0.9.9-65)dfm()中的功能删除并没有消除形成双字母组的停止词。要覆盖它,请尝试:

# form the tokens, removing punctuation
mytoks <- tokens(mycorpus, remove_punct = TRUE)
# remove the Polish stopwords, leave pads
mytoks <- tokens_remove(mytoks, stopwordsPL, padding = TRUE)
## can't do this next one since no Polish stemmer in 
## SnowballC::getStemLanguages()
# mytoks <- tokens_wordstem(mytoks, language = "polish")
# form the ngrams
mytoks <- tokens_ngrams(mytoks, n = c(1, 3))
# construct the dfm
dfm(mytoks)