[英]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.