首页 > 解决方案 > 如何在 Quanteda 中使用 docvars 从原始文本创建文档变量

问题描述

我正在使用 Quanteda 分析派对平台,它们是 txt 文件。我已经将两组聚会平台绑定到一个dfm中:

 corp20dr <- corp20d + corp20r
        summary(corp20dr)`
    Document-feature matrix of: 28 documents, 6,595 features (85.0% sparse).
    > summary(corp20dr)
    Corpus consisting of 28 documents:

            Text Types Tokens Sentences
     akdem20.txt  1895   7624       332
     azdem20.txt   908   2921        94
     cadem20.txt  3255  19881       150
     medem20.txt   355    863        39
.....................................
     wvgop20.txt  1419   5013       106
     wygop20.txt   428   1085        45

我想比较民主党(corp20d)和共和党平台(corp20r)。但是,我似乎需要使用 docvars 来比较不同的组(15 Dem,13 GOP)。当我使用 textplot_keyness 时,我打算对所有文本进行比较,但结果是将第一个文本与语料库中的所有其他文本进行比较。

corp20dr_dfm <- dfm(corpus(corp20dr), 
                          remove = stopwords("english"), stem = TRUE, remove_numbers = TRUE, ```
remove_punct = TRUE)
corp20dr_dfm     
         
result_keyness <- textstat_keyness(corp20dr_dfm)
textplot_keyness(result_keyness,
                 color = c('blue', 'red'))

结果是将阿拉斯加平台与似乎是其他 27 个文档的“参考”进行了比较。我希望使用两组语料库(15 个民主党平台与 13 个共和党平台相比)在单词使用方面的比较差异,但我似乎必须使用 docvars 来识别每个组。但我不知道该怎么做。任何帮助,将不胜感激。

标签: rtext-miningcorpusquanteda

解决方案


keyness 函数仅将一个参考文档与所有其他参考文档进行比较,因此您应该在调用之前按原始语料库对文档进行分组textstat_keyness()。您可以通过使用dfm_group()标识语料库的新 docvar 来做到这一点。请参阅下面的可重现示例。

library("quanteda")
## Package version: 2.1.2

corp_a <- corpus(data_corpus_inaugural[1:5])
corp_b <- corpus(data_corpus_inaugural[6:10])

# this is the key: identifying the original corpus
# will be used to group the dfm later into just two combined "documents"
corp_a$source <- "a"
corp_b$source <- "b"

corp <- corp_a + corp_b
summary(corp)
## Corpus consisting of 10 documents, showing 10 documents:
## 
##             Text Types Tokens Sentences Year  President   FirstName
##  1789-Washington   625   1537        23 1789 Washington      George
##  1793-Washington    96    147         4 1793 Washington      George
##       1797-Adams   826   2577        37 1797      Adams        John
##   1801-Jefferson   717   1923        41 1801  Jefferson      Thomas
##   1805-Jefferson   804   2380        45 1805  Jefferson      Thomas
##     1809-Madison   535   1261        21 1809    Madison       James
##     1813-Madison   541   1302        33 1813    Madison       James
##      1817-Monroe  1040   3677       121 1817     Monroe       James
##      1821-Monroe  1259   4886       131 1821     Monroe       James
##       1825-Adams  1003   3147        74 1825      Adams John Quincy
##                  Party source
##                   none      a
##                   none      a
##             Federalist      a
##  Democratic-Republican      a
##  Democratic-Republican      a
##  Democratic-Republican      b
##  Democratic-Republican      b
##  Democratic-Republican      b
##  Democratic-Republican      b
##  Democratic-Republican      b

现在我们可以完成形成 dfm、分组和获取关键统计信息的步骤。(在这里,我也删除了停用词和标点符号。)

# using the separate package since we are moving textstat_*() functions
# to this module package with quanteda v3 release planned in 2021
library("quanteda.textstats")
corp %>%
  tokens(remove_punct = TRUE) %>%
  tokens_remove(stopwords("en")) %>%
  dfm() %>%
  dfm_group(groups = "source") %>%
  textstat_keyness() %>%
  head()
##   feature      chi2            p n_target n_reference
## 1    love 11.236174 0.0008021834       10           1
## 2    mind 10.108762 0.0014756604       11           3
## 3    good  9.971163 0.0015901101       17           8
## 4     may  9.190508 0.0024327341       38          31
## 5     can  8.887529 0.0028712512       27          19
## 6   shall  7.728615 0.0054352433       23          16

推荐阅读