使用Quanteda中的字典从DFM子集/选择

时间:2018-10-16 00:20:32

标签: r text-mining quanteda

我有来自不同国家的文本集。我正在尝试查看每个国家的文本中出现一个特定术语的频率。为此,我在这里遵循以下示例:https://quanteda.io/articles/pkgdown/examples/plotting.html#frequency-plots

freq_grouped <- textstat_frequency(dfm(full_corpus), 
                                   groups = "Country")

freq_const <- subset(freq_grouped, freq_grouped$feature %in% "constitution")

这很好用,除了只捕获确切的用语(“宪法”)。我希望能够捕获使用glob(例如“ *constitution*”)的术语(例如“权利和自由宪章”)的变体,并计算同一类别下的结果。我尝试为此使用字典,但结果为零。

dict <- dictionary(list(constitution = c('*constitution*', 'charter of rights and freedoms', 
                                         'canadian charter', 'constituição*', '*constitucion*')))

freq_const <- subset(freq_grouped, freq_grouped$feature %in% dict)

freq_const
    [1] feature   frequency rank      docfreq   group    
    <0 rows> (or 0-length row.names)

我该如何实现这一目标?

1 个答案:

答案 0 :(得分:1)

基本答案是,您不能使用字典或任何其他类型的模式匹配来对dfm进行子集化,因为dfm_subset()的子集匹配要求逻辑值与 documents 1:1匹配。字典将匹配功能,而不匹配文档。

但是,如果您想在不选择文档的同时匹配功能,我想这就是您想要的,那么您可以使用dfm_select() quanteda < / strong>词典是该命令的pattern自变量的有效输入。此外,使用valuetype = "glob"参数,您可以指定模式匹配是全局而不是正则表达式。

library("quanteda")

subdfm <- dfm(data_corpus_inaugural) %>%
    dfm_select(pattern = dict, valuetype = "glob")

head(subdfm)
## Document-feature matrix of: 6 documents, 5 features (66.7% sparse).
## 6 x 5 sparse Matrix of class "dfm"
##                  features
## docs              constitutional constitution constitutions constitutionally unconstitutional
##   1789-Washington              1            1             0                0                0
##   1793-Washington              1            1             0                0                0
##   1797-Adams                   0            8             1                0                0
##   1801-Jefferson               1            2             0                0                0
##   1805-Jefferson               0            6             0                0                0
##   1809-Madison                 0            1             0                0                0

textstat_frequency(subdfm)
##            feature frequency rank docfreq group
## 1     constitution       206    1      37   all
## 2   constitutional        53    2      24   all
## 3    constitutions         4    3       3   all
## 4 constitutionally         4    4       3   all
## 5 unconstitutional         3    5       3   all

如果您有用于创建dfm的语料库的docvar,您还可以将其提供给textstat_frequency()调用-它们将附加到dfm。