如何在 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 民主党,13 共和党)之间进行比较。当我使用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 来识别每个组。但我不知道如何做到这一点。任何帮助将不胜感激。

解决方法

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

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、分组和获取keyness统计的步骤。 (在这里,我也删除了停用词和标点符号。)

# 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...