簡體   English   中英

R的tm包用於字數統計

[英]R's tm package for word count

我有一個包含超過5000個文本文件的語料庫。 我想在每個文件運行預處理之后獲得每個文件的單個字數(轉向更低,刪除停用詞等)。 我對單個文本文件的單詞計數沒有任何好運。 任何幫助,將不勝感激。

library(tm)
revs<-Corpus(DirSource("data/")) 
revs<-tm_map(revs,tolower) 
revs<-tm_map(revs,removeWords, stopwords("english")) 
revs<-tm_map(revs,removePunctuation) 
revs<-tm_map(revs,removeNumbers) 
revs<-tm_map(revs,stripWhitespace) 
dtm<-DocumentTermMatrix(revs) 

正如泰勒所說,如果沒有可重復的例子,你的問題就不完整了。 以下是如何為此類問題創建可重現的示例 - 使用隨程序包內置的數據:

library("tm") # version 0.6, you seem to be using an older version
data(crude)
revs <- tm_map(crude, content_transformer(tolower)) 
revs <- tm_map(revs, removeWords, stopwords("english")) 
revs <- tm_map(revs, removePunctuation) 
revs <- tm_map(revs, removeNumbers) 
revs <- tm_map(revs, stripWhitespace) 
dtm <- DocumentTermMatrix(revs)

以下是如何獲取每個文檔的單詞計數,dtm的每一行都是一個文檔,因此您只需對行的列求和,並為文檔指定單詞count:

# Word count per document
rowSums(as.matrix(dtm))

你也可以在我和Paul Nulty一起開發的quanteda包中做到這一點。 為此目的,使用quanteda工具很容易創建自己的語料庫,但它也直接導入tm VCorpus對象(如下所示)。

您可以使用語料庫對象類型的summary()方法獲取每個文檔的令牌計數,或者使用dfm()創建文檔特征矩陣,然后在生成的文檔特征矩陣上使用rowSums() dfm()默認應用您需要使用tm包單獨應用的清理步驟。

data(crude, package="tm")
mycorpus <- corpus(crude)
summary(mycorpus)
## Corpus consisting of 20 documents.
## 
## Text Types Tokens Sentences
## reut-00001.xml    56     90         8
## reut-00002.xml   224    439        21
## reut-00004.xml    39     51         4
## reut-00005.xml    49     66         6
## reut-00006.xml    59     88         3
## reut-00007.xml   229    443        25
## reut-00008.xml   232    420        23
## reut-00009.xml    96    134         9
## reut-00010.xml   165    297        22
## reut-00011.xml   179    336        20
## reut-00012.xml   179    360        23
## reut-00013.xml    67     92         3
## reut-00014.xml    68    103         7
## reut-00015.xml    71     97         4
## reut-00016.xml    72    109         4
## reut-00018.xml    90    144         9
## reut-00019.xml   117    194        13
## reut-00021.xml    47     77        12
## reut-00022.xml   142    281        12
## reut-00023.xml    30     43         8
## 
## Source:  Converted from tm VCorpus 'crude'.
## Created: Sun May 31 18:24:07 2015.
## Notes:   .
mydfm <- dfm(mycorpus)
## Creating a dfm from a corpus ...
## ... indexing 20 documents
## ... tokenizing texts, found 3,979 total tokens
## ... cleaning the tokens, 115 removed entirely
## ... summing tokens by document
## ... indexing 1,048 feature types
## ... building sparse matrix
## ... created a 20 x 1048 sparse dfm
## ... complete. Elapsed time: 0.039 seconds.
rowSums(mydfm)
## reut-00001.xml reut-00002.xml reut-00004.xml reut-00005.xml reut-00006.xml reut-00007.xml 
##             90            439             51             66             88            443 
## reut-00008.xml reut-00009.xml reut-00010.xml reut-00011.xml reut-00012.xml reut-00013.xml 
##            420            134            297            336            360             92 
## reut-00014.xml reut-00015.xml reut-00016.xml reut-00018.xml reut-00019.xml reut-00021.xml 
##            103             97            109            144            194             77 
## reut-00022.xml reut-00023.xml 
##            281             43 

我很樂意幫助處理任何與quanteda相關的問題。

你的問題沒有說明你只想要基於R的解決方案,所以這里有一個非常簡單的解決方案來計算文本文件中的單詞:在終端或命令行使用Gnu實用程序wc ,用-w指定單詞,例如

KB-iMac:~ kbenoit$ wc -w *.txt
       3 mytempfile.txt
       3 mytempfileAscii.txt
      14 tweet12.txt
      17 tweet12b.txt
      37 total

顯示的數字是這組說明性文本文件的字數。

wc已經包含在OS X和Linux中,可以從Rtools集安裝到Windows。

你可以嘗試這樣做:

for (m in 1:length(revs) {
sum(nchar(as.character(revs[[m]])))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM