Как в Quanteda можно буквально сопоставить кавычки? - PullRequest
1 голос
/ 18 июня 2020

Краткий вопрос, поскольку я пытаюсь сопоставить кавычки в токене предложения, используя функцию Quanteda tokens_lookup() и valuetype="regex". Основываясь на информации, предоставленной здесь о вкусе регулярных выражений, который использует Quanteda, я подумал, что способ go with будет \Q ... \E, но это не помогло.

library(quanteda) 
# package version: 1.5.2

text <- c("text „some quoted text“ more text", "text « some quoted text » more text")

dict <- dictionary(list(MY_KEY = c("\Q*\E")))
# Error: '\Q' is an unrecognized escape in character string starting ""\Q"

Я также пытался сопоставить кавычки напрямую "“", что, по крайней мере, кажется допустимым шаблоном регулярного выражения, но в конце концов это тоже не сработало. Также не было вариантов \Q...\E с двойной обратной косой чертой, поскольку они используются для границ слов, например (\\b).

Так что более общий вопрос, который я считаю, заключается в том, упоминаются ли здесь регулярные выражения совместимы с тем, что Quanta понимает как valuetype="regex".

EDIT:

Это сработало для первой строки, но не для второй.

dict <- dictionary(list(MY_KEY = c(".\".")))

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Регулярные выражения в quanteda построены на основе пакета stringi , который поддерживает категории символов Unicode. Вы можете получить все свои цитаты, используя следующие категории в шаблоне поиска:

  • Ps , Pe - знаки препинания, открыть и закрыть
  • Pi , Pf - Начальная и конечная цитата с пунктуацией

Я включил все четыре, так как, например, находится в Ps, но не в Pi, и « находится в Пи, но не в Ps.

Более подробная информация здесь .

library("quanteda")
## Package version: 2.0.1

text <- c(
  "text „some quoted text“ more text",
  "text « some quoted text » more text"
)
toks <- tokens(text)

tokens_select(toks, "[\\p{Pf}\\p{Pi}\\p{Ps}\\p{Pe}]", valuetype = "regex")
## Tokens consisting of 2 documents.
## text1 :
## [1] "„"
## 
## text2 :
## [1] "«" "»"
0 голосов
/ 18 июня 2020

Возможно, это проблема языка или локали? Ваши "кавычки" не выглядят на моем экране как кавычки, и когда я меняю шаблон, я могу их найти.

library(quanteda) 
#> Package version: 2.0.1

text <- c("text „some quoted text“ more text", "text « some quoted text » more text")

dict <- dictionary(list(found_it = c("„"), found_other = c("«")))

toks2 <- tokens(text)
tokens_lookup(toks2, dict)

#> Tokens consisting of 2 documents.
#> text1 :
#> [1] "found_it"
#> 
#> text2 :
#> [1] "found_other"
...