问题描述
我正在使用 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