Когда вы запрашиваете 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
Наконец, если вы хотели принципиально отличить «Канадскую хартию прав» от «Канадской хартии», вы могли бы иметьвначале составляли первое, а затем второе (самое длинное - самое короткое здесь).Но это не совсем то, что вы спросили.