Что нужно понять с помощью phrase()
, так это то, что он позволяет создавать последовательности шаблонов, разделенных пробелами, как однозначное значение. Он не должен, по крайней мере для обычного использования, включать разделители пробелов в качестве части шаблона.
Я выбрал воспроизводимый пример для первой части вашего вопроса , который, я думаю, иллюстрирует суть и отвечает на ваш вопрос.
Здесь мы просто помещаем различные шаблоны в phrase()
с пробелом между ними. Это эквивалентно обертыванию их внутри list()
и превращению последовательности отдельных шаблонов в элементы вектора символов.
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
Мы также могли бы рассмотреть вектор совпадений последовательности, в том числе с очень инклюзивными совпадениями Например, ".+ ^a$"
ниже соответствует любой последовательности из 1 или более символов, за которой следует токен "a"
. Обратите внимание, как ^$
явно указывает, что это начало и конец регулярного выражения (с одним токеном).
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
Для часть вторая вы можете использовать сопоставление с подстановочными знаками для сопоставить что угодно, что проще всего с использованием стандартного «глобального» совпадения:
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 |
Обратите внимание, наконец, что возможно включить пробел как часть сопоставления с образцом, но только если у вас есть токены, которые включают пробелы. Это было бы верно, если бы вы передавали аргумент remove_separators = FALSE
в вызов tokens()
через ...
(см. ?kwic
), или если вы создали токены другим способом, чтобы убедиться, что они содержат пробелы.
as.tokens(list(d1 = c("a b", " ", "c"))) %>%
kwic(phrase("\\s"), valuetype = "regex")
#>
#> [d1, 1] | a b | c
#> [d1, 2] a b | | c
Там отображаемое «ab» - это фактически один токен «ab», а не последовательность токенов «a», «b». Пробел во второй строке - это токен "".
Создан в 2020-03-31 пакетом Представить (v0.3.0)