Соответствие строк с str_detect и регулярным выражением - PullRequest
0 голосов
/ 09 июня 2018

У меня есть фрейм данных, содержащий неструктурированный текст.В этом воспроизводимом примере я загружаю регистрацию компании 10K прямо с сайта SEC и загружаю ее с read.table.

dir = getwd(); setwd(dir)

download.file("https://www.sec.gov/Archives/edgar/data/2648/0000002648-96-000013.txt", file.path(dir,"filing.txt"))

filing <- read.table(file=file.path(dir, "filing.txt"), sep="\t", quote="", comment.char="")
droplevels.data.frame(filing)

Я хочу удалить заголовок SEC, чтобы сосредоточиться на основной части документа (начиная со строки 216) и разделить мой текст на разделы / элементы.

> filing$V1[216:218]
[1] PART I 
[2] Item  1.    Business.                                                                                                                                                      
[3]            A.  Organization of Business                                      

Поэтому я пытаюсь сопоставить строки, начинающиеся со слова Item (или ITEM), за которым следуют один или несколько пробелов, одна или две цифры, точка, один или несколько пробелов и одно или несколько слов.Например:

Item 1. Business.
ITEM 1.  BUSINESS
Item  1.  Business
Item 10. Directors and Executive Officers of 
ITEM  10. DIRECTORS AND EXECUTIVE OFFICERS OF THE REGISTRANT

Моя попытка включает в себя str_detect и regex, чтобы создать переменную count, которая будет отображаться каждый раз при совпадении строки.

library(dplyr)
library(stringr)
tidy_filing <- filing %>% mutate(count = cumsum(str_detect(V1, regex("^Item [\\d]{1,2}\\.",ignore_case = TRUE)))) %>% ungroup()

Однако я пропускаюпервые 9 предметов и мой счет начинается только с пункта 10.

tidy_filing[c(217, 218,251:254),]
       V1                               count
217    Item  1.   Business.               0
218    A.  Organization of Business 3     0
251                          PART III     0
252    Item 10.   Directors etc.   38     1
253    Item 11.   Executive Compens. 38   2
254    Item 12.   Security Ownership. 38  3           

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 09 июня 2018

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

"^Item\\s+\\d{1,2}\\."
...