Шаблон регулярных выражений для подсчета строк в стихотворениях со случайными n или n n в качестве разрывов строк

#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.