Найдите шаблон в нескольких строках с помощью R

Я пытаюсь определить шаблон в нескольких строках, а точнее в двух строках. Поскольку узор в любой отдельной строке не уникален, я использую этот подход.

До сих пор я пытался использовать функцию "grep", но я думаю, что здесь отсутствует правильное регулярное выражение.

grep("^Item\\s{0,}2[^A]", f.text, ignore.case = TRUE)

Эта часть представляет собой модифицированную версию функции "getfillings" пакета edgar и пытается извлечь только Комментарий/Элемент 2 Руководства для квартальных результатов. Если возможно, я бы включил что-то после ... 2[^A] в функцию, которая реагирует на новую строку, а затем строку "Управление..."

Шаблон в простых текстах, которые у меня есть, выглядит так:

Пункт 2.
Обсуждение руководством и анализ финансового состояния и результатов деятельности

Я был бы признателен за любые комментарии о том, как лучше всего зафиксировать это в регулярном выражении с помощью R.

Пример ввода выглядит следующим образом:

21 Пункт 2.
Обсуждение руководством и анализ финансового положения и результатов деятельности Этот раздел и другие части настоящего Ежеквартального отчета по форме 10 Пункт 3.
Раскрытие количественной и качественной информации о рыночном риске существенные изменения рыночного риска Компании

и желаемый результат будет

Обсуждение руководством и анализ финансового положения и результатов деятельности Этот раздел и другие части настоящего Ежеквартального отчета по форме 10

Мне нужно сопоставить «Пункт 2. ... Обсуждение руководства», поскольку пункт 2 не уникален. Как я могу сформулировать регулярное выражение в две строки?


person Johann    schedule 24.05.2020    source источник
comment
Просто чтобы быть уверенным: не могли бы вы опубликовать точный пример вашего ввода и желаемого результата?   -  person Martin Gal    schedule 24.05.2020
comment
@MartinGal Я обновил описание проблемы   -  person Johann    schedule 25.05.2020
comment
\\n дает вам разрыв строки. Возможно, это решит вашу проблему?   -  person Martin Gal    schedule 25.05.2020


Ответы (2)


Не очень сложно, так как я не эксперт в работе со строками: использование пакета tidyverse предоставляет несколько мощных инструментов для получения желаемого результата.

text <- "21 Item 2.
Management Discussion and Analysis of Financial Condition and Results of Operations This section and other parts of this Quarterly Report on Form 10 Item 3.
Quantitative and Qualitative Disclosures About Market Risk There have been no material changes to the Company market risk Item 4.
Fluffy Text example Item 5.
Lorem ipsum dolor sit amet, consectetur adipisici elit"

В настоящее время

text %>%
  str_extract_all("(?<=Item\\s\\d[[:punct:]]\\n).*", simplify = TRUE) %>%
  str_remove("\\s+Item\\s\\d[[:punct:]]")

дает тебе

[1] "Management Discussion and Analysis of Financial Condition and Results of Operations This section and other parts of this Quarterly Report on Form 10"
[2] "Quantitative and Qualitative Disclosures About Market Risk There have been no material changes to the Company market risk"                           
[3] "Fluffy Text example"                                                                                                                                 
[4] "Lorem ipsum dolor sit amet, consectetur adipisici elit" 

Если вы просто хотите извлечь Элемент 2, замените \\d внутри str_extract_all на 2.

person Martin Gal    schedule 25.05.2020

Вы можете просто удалить разрыв строки:

gsub("\\n", "", text)
[1] "21 Item 2.Management Discussion and Analysis of Financial Condition and Results of Operations This section and other parts of this Quarterly Report on Form 10 Item 3.Quantitative and Qualitative Disclosures About Market Risk There have been no material changes to the Company market risk"

Теперь у вас есть все в одной длинной строке, и вы можете извлечь любой шаблон, который вам нужен. Например, используя str_extract из пакета stringr:

library(stringr)
str_extract(gsub("\\n", "", text), "Management.*on Form 10")
[1] "Management Discussion and Analysis of Financial Condition and Results of Operations This section and other parts of this Quarterly Report on Form 10"

Данные:

text <- "21 Item 2.
Management Discussion and Analysis of Financial Condition and Results of Operations This section and other parts of this Quarterly Report on Form 10 Item 3.
Quantitative and Qualitative Disclosures About Market Risk There have been no material changes to the Company market risk"

text
[1] "21 Item 2.\nManagement Discussion and Analysis of Financial Condition and Results of Operations This section and other parts of this Quarterly Report on Form 10 Item 3.\nQuantitative and Qualitative Disclosures About Market Risk There have been no material changes to the Company market risk"
person Chris Ruehlemann    schedule 25.05.2020