2017-07-26 26 views
3

由於在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)) 

什麼都沒有我的停用詞出現在語料庫和分析中。應該使用自定義停用詞的正確方法/語法是什麼?

+0

您能否提供示例數據? – jdb

+0

當然:這裏有一切。 https://www.dropbox.com/s/vqasd32m8kmkfi5/text_data.zip?dl=0它只有五個文本和一個帶波蘭停用詞的文件。其餘的只是測試語法,如果它允許簡單的DM。 –

回答

5

假設你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應該帶一個字符向量。此外,恐怕還沒有波蘭的stemmer實施。

當前(v0.9.9-65)dfm()中的功能刪除不會消除形成bigrams的停用詞。要覆蓋此設置,請嘗試:

# 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) 
+2

非常感謝!有用。我打算使用你的答案在被randomforest指示後刪除最不重要的ngram。 –