【问题标题】:R's tm package for word countR的字数统计包
【发布时间】:2014-12-18 01:42:08
【问题描述】:

我有一个包含 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) 

【问题讨论】:

  • 请添加可重现的数据集。当您提出问题时,这是预期的。
  • 投票结束,没有最小的工作示例

标签: r word-count tm corpus text-analysis


【解决方案1】:

您可以尝试这样做:

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

【讨论】:

    【解决方案2】:

    您的问题并未指定您只需要基于 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 set 安装到 Windows。

    【讨论】:

      【解决方案3】:

      您也可以在我与 Paul Nulty 开发的 quanteda package 中执行此操作。为此,使用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 相关的问题提供帮助。

      【讨论】:

        【解决方案4】:

        正如 Tyler 所说,如果没有可重复的示例,您的问题是不完整的。以下是如何为此类问题制作一个可重复的示例 - 使用包中内置的数据:

        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 的每一行都是一个文档,因此您只需将一行的列相加,就可以得到文档的字数:

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

        【讨论】:

          猜你喜欢
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 2021-12-03
          • 2018-10-26
          • 1970-01-01
          • 1970-01-01
          • 2012-05-15
          • 2022-08-06
          相关资源
          最近更新 更多