Ce qu'il faut comprendre avec phrase()
est qu'il permet de créer des séquences de motifs, délimitées par des espaces, comme une seule valeur de caractère. Il ne devrait pas, du moins pour une utilisation normale, inclure les délimiteurs d'espacement dans le motif.
J'ai choisi un exemple reproductible pour les première partie de votre question qui, je pense, illustre bien le propos et répond à votre question.
Ici, nous mettons simplement les différents modèles dans phrase()
avec un espace entre eux. Cela équivaut à les envelopper dans un list()
et de faire de la séquence de motifs séparés les éléments d'un vecteur de caractères.
library("quanteda")
#> Package version: 2.0.1
kwic("a b c a b d e", pattern = phrase("b c|d"), valuetype = "regex")
#>
#> [text1, 2:3] a | b c | a b d e
#> [text1, 5:6] a b c a | b d | e
kwic("a b c a b d e", pattern = list(c("b", "c|d")), valuetype = "regex")
#>
#> [text1, 2:3] a | b c | a b d e
#> [text1, 5:6] a b c a | b d | e
Nous pourrions également considérer un vecteur de correspondances de séquences, y compris avec des correspondances très inclusives, comme le ".+ ^a$"
ci-dessous correspondant à toute séquence de 1 ou plusieurs caractères, suivie du jeton "a"
. Remarquez comment le ^$
rend explicite le fait qu'il s'agit du début et de la fin de la regex (à un seul token).
kwic("a b c a b d e", pattern = phrase(c("b c|d", ".+ ^a$")), valuetype = "regex")
#>
#> [text1, 2:3] a | b c | a b d e
#> [text1, 3:4] a b | c a | b d e
#> [text1, 5:6] a b c a | b d | e
Pour deuxième partie vous pouvez utiliser la correspondance par caractères génériques pour correspondre à n'importe quoi, ce qui est plus facile en utilisant la correspondance par défaut "glob" :
kwic("this is a test", pattern = phrase("* * *"))
#>
#> [text1, 1:3] | this is a | test
#> [text1, 2:4] this | is a test |
kwic("this is a test", pattern = phrase("* *"))
#>
#> [text1, 1:2] | this is | a test
#> [text1, 2:3] this | is a | test
#> [text1, 3:4] this is | a test |
Notez enfin qu'il est Il est possible d'inclure des espaces dans une correspondance de motifs, mais uniquement si les mots-clés incluent des espaces. Ce serait le cas si vous passiez par l'option remove_separators = FALSE
à l'argument tokens()
appeler via ...
(voir ?kwic
), ou si vous avez créé les jetons d'une autre manière pour vous assurer qu'ils contiennent des espaces.
as.tokens(list(d1 = c("a b", " ", "c"))) %>%
kwic(phrase("\\s"), valuetype = "regex")
#>
#> [d1, 1] | a b | c
#> [d1, 2] a b | | c
Là, le "a b" qui est affiché est en fait le seul jeton "a b", et non la séquence de jetons "a", "b". Le blanc de la deuxième ligne est le jeton " ".
Créé le 2020-03-31 par le paquet reprex (v0.3.0)