2017-06-01 237 views
3

我使用tmwordcloud在R中執行一些基本的文本挖掘。正在處理的文本包含很多無意義的單詞,如asfdg,aawptkr,我需要過濾這些單詞。 我找到的最接近的解決方案是使用library(qdapDictionaries)並構建自定義函數來檢查單詞的有效性。從R中的語料庫中刪除無意義的單詞

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()工作正常辦理dataframes但如何使用它語料庫處理?

感謝

+0

hello check'content_transformer'這就是你需要的 –

+0

@ s.brunel,'content_transformer'與修改語料庫的函數一起工作,'is.word'剛剛返回True/False – parth

回答

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) 
+0

感謝@Moody的迴應,它過濾掉了單詞在某種程度上。 – parth

+0

在某種程度上?也許確保雙方都是小寫 –

+0

是的,謝謝,我在這些步驟之前應用了一些轉換,工作一切正常。只發出它是資源消耗。 – parth

4

如果你願意嘗試不同的文本挖掘包,那麼這將工作:

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字)。

+0

感謝@Ken的幫助,我查了一下'quanteda'並減少了一些數據,而不是考慮所有的詞來加速這個過程 – parth

相關問題