r - 如何在 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 来识别每个组。但我不知道该怎么做。任何帮助,将不胜感激。
解决方案
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
推荐阅读
- laravel-5 - laravel save() 返回错误调用未定义的方法 stdClass::save()
- corda - 无法在 cordapp-template-java 中运行流程
- hive - Flyway Hive 架构历史表问题
- spring-boot - Spring Boot @RequestPart 字符集编码
- apache-kafka - Kafka连接接收器-创建接收器连接器时出错:DO UPDATE SET被中止:错误:输入结束时的语法错误
- django - 在数字海洋上部署时如何修复“退出状态 1”错误
- javascript - 获取日期并将其显示为字符串
- typescript - Rollup 无法将源代码与 Bazel 和 Typescript 捆绑在一起
- git - git clone 在网络文件系统上失败
- amazon-web-services - 将tomcat的每个日志文件发送到AWS Cloudwatch Logs