#r #regex #nlp #data-science #quanteda
#r #регулярное выражение #нлп #наука о данных #квантеда
Вопрос:
Мне нужно сосчитать строки из 221 стихотворения, и я попытался сосчитать разрывы строк n.
Однако некоторые строки имеют двойные разрывы строк n n, чтобы создать новый стих. Я хочу, чтобы они считались только одним. Количество и расположение двойных разрывов строк в каждом стихотворении являются случайными.
Минимальный рабочий пример:
library("quanteda")
poem1 <- "This is a linenThis is a linennAnother linennAnd another onenThis is the last one"
poem2 <- "Some poetrynnMore poetic stuffnAnother very poetic linennThis is the last line of the poem"
poems <- quanteda::corpus(poem1, poem2)
Результирующее количество строк должно составлять 5 строк для poem1
и 4 строки для poem2
.
Я пытался stringi::stri_count_fixed(texts(poems), pattern = "n")
, но шаблон регулярных выражений недостаточно сложен, чтобы учесть проблему случайного двойного разрыва строки.
Комментарии:
1. Нет, используйте
"\R "
, он соответствует любой одной или нескольким последовательностям разрыва строки как одному совпадению.2. Но nn следует считать только единицей
3. Но вы не должны использовать
_fixed
функцию с регулярным выражением. Это должно бытьstringi::stri_count_regex
. Илиstringr::str_count
Ответ №1:
Вы можете использовать stringr::str_count
с R
шаблоном, чтобы найти количество последовательных последовательностей разрывов строк в строке:
> poem1 <- "This is a linenThis is a linennAnother linennAnd another onenThis is the last one"
> poem2 <- "Some poetrynnMore poetic stuffnAnother very poetic linennThis is the last line of the poem"
> library(stringr)
> str_count(poem1, "\R ")
[1] 4
> str_count(poem2, "\R ")
[1] 3
Итак, количество строк равно str_count(x, "\R ") 1
.
R
Шаблон соответствует любой последовательности разрывов строк, CRLF, LF или CR. R
соответствует последовательности из одной или нескольких таких последовательностей разрывов строк.
Смотрите демонстрацию R-кода онлайн:
poem1 <- "This is a linenThis is a linennAnother linennAnd another onenThis is the last one"
poem2 <- "Some poetrynnMore poetic stuffnAnother very poetic linennThis is the last line of the poem"
library(stringr)
str_count(poem1, "\R ")
# => [1] 4
str_count(poem2, "\R ")
# => [1] 3
## Line counts:
str_count(poem1, "\R ") 1
# => [1] 5
str_count(poem2, "\R ") 1
# => [1] 4
Комментарии:
1. Спасибо, что объяснили обоснование вашего ответа, я был рад узнать о совпадении разрыва строки с R.