在Quanteda中避免使用kwic重叠术语

时间:2019-02-04 19:29:55

标签: r quanteda

我正在使用词典来搜索语料库中出现的术语,这些术语可能会单独出现,尽管它们经常会重叠:

corpus <- c("According to the Canadian Charter of Rights and Freedoms, all Canadians...")

dict <- dictionary(list(constitution = c("charter of rights", "canadian charter"))) 

kwic(corpus, dict)

以上内容(正确地)两次标识了以下句子:

"According to the Canadian Charter of Rights and Freedoms, all Canadians..."

但是,为了确定出现这些术语的频率,并避免重复计算,我需要确保仅在出现“加拿大宪章”一词的情况下才对它进行计数。的权利...”

我该怎么做?

编辑:刚刚注意到,如果使用tokens_lookup,这不是问题,所以这个问题是一个静默点。保留它以防对其他人有帮助。

1 个答案:

答案 0 :(得分:1)

当您要求kwic时,即使它们重叠,也会获得所有模式匹配。因此,按照我认为您要求的那样,避免重叠的方法是将多字表达式(MWE)手动转换为单个标记,以防止它们重叠。在您的情况下,您要在不包含“权利”的情况下计算“加拿大宪章”。然后,我建议您标记文本,然后以确保它们不会重叠的顺序混合MWE。

library("quanteda", warn.conflicts = FALSE)
## Package version: 1.4.0
## Parallel computing: 2 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
txt <- "The Canadian charter of rights and the Canadian charter are different."
dict <- dictionary(list(constitution = c("charter of rights", "canadian charter")))

toks <- tokens(txt)
tokscomp <- toks %>%
  tokens_compound(phrase("charter of rights"), concatenator = " ") %>%
  tokens_compound(phrase("Canadian charter"), concatenator = " ")
tokscomp
## tokens from 1 document.
## text1 :
## [1] "The"               "Canadian"          "charter of rights"
## [4] "and"               "the"               "Canadian charter" 
## [7] "are"               "different"         "."

这已将词组变成单个标记,在此处以空格分隔,这意味着在kwic()(如果您要使用的是)中,它们不会重复计算,因为它们现在是唯一的MWE匹配。

kwic(tokscomp, dict, window = 2)
##                                                             
##  [text1, 3] The Canadian | charter of rights | and the      
##  [text1, 6]      and the | Canadian charter  | are different

请注意,仅是为了对它们进行计数,您可以将dfm()与字典一起用作select参数的值:

dfm(tokscomp, select = dict)
## Document-feature matrix of: 1 document, 2 features (0.0% sparse).
## 1 x 2 sparse Matrix of class "dfm"
##        features
## docs    charter of rights canadian charter
##   text1                 1                1

最后,如果您主要是想将“加拿大权利宪章”与“加拿大宪章”区分开,则可以先将前者和后者进行混合(最好长到最短)。但这不完全是您的要求。