У меня есть фрейм данных, содержащий неструктурированный текст.В этом воспроизводимом примере я загружаю регистрацию компании 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
Любая помощь будет принята с благодарностью.