Извлечь абзацы, содержащие только ключевое слово в r

Итак, в текстовом файле в R мне нужно просмотреть множество документов в поисках абзаца с упоминаемой в нем «учетной ставкой». Затем я хочу извлечь весь абзац, в котором он находится, и только это. до и после каждого абзаца в текстовом файле есть пустая строка, написанная как «». Я предоставил пример кода того, что я пробовал, но это не работает, и несколько абзацев txt-файла, один из которых включает ключевые слова «учетная ставка».

 t <- c(grep(" discount rate ",txt,ignore.case = T),grep(" discounted cash flow",txt,ignore.case = T))

  temp <- unlist(str_extract_all(txt,"\r\r. discount rate .\r\r"))

Таким образом, мой метод состоял в том, чтобы попытаться извлечь все строки между "" и "", допуская, что они содержат "учетную ставку", но явно не увенчался успехом с этим кодом.


""
" (9) любую продажу или отчуждение любого имущества или оборудования, которое"
"было повреждено, изношено, устарело или иным образом стало бесполезным или"
" больше не используется Armor Holdings в связи с с бизнесом Armor"
"Holdings или ее дочерних компаний с ограниченным определения, текущая стоимость обязательства"
"арендатора по чистым арендным платежам в течение оставшегося срока аренды, включенного"
"в такую ​​операцию продажи с обратной арендой, включая любой период, в течение которого такие"
"аренда была продлена или может быть продлена по выбору арендодателя. Такая"
"текущая стоимость рассчитывается с использованием ставки дисконтирования, равной ставке"
"процентов, подразумеваемых в такой сделке, определяется в соответствии с GAAP."
""
" \"Бенефициарный владелец\" имеет значение, установленное для такого термина в Правиле 13d- 3"
"и Правило 13d-5 в соответствии с Законом о биржах, за исключением того, что при расчете бенефициарного"
"владения каким-либо конкретным \"лицом\" (поскольку этот термин используется в Разделе 13(d)(3 )"
"Закона о биржах", считается, что такое \"лицо\" имеет бенефициарное владение"
"всеми ценными бумагами, которые такое \"лицо\" имеет право приобрести путем конвертации или"< br> "использование других ценных бумаг, независимо от того, осуществляется ли такое право в настоящее время или"
"осуществляется только при наступлении последующего условия. Термины"
"\"Находится в бенефициарной собственности\" и \"Находится в бенефициарной собственности\" имеют соответствующее значение." ""
" \"Совет директоров\" означает:"
""
" (1) в отношении корпорации - совет директоров "
" корпорации;"
""
" (2) в отношении товарищества - совет директоров "< br> "генеральный партнер товарищества; и"
""
" (3) в отношении любого другого Лица, совета или комитета"
" такого Лица, выполняющего аналогичную функцию."
""


person Kevin Ocampo    schedule 31.07.2017    source источник


Ответы (2)


Сохранение вашего файла как text.txt, это работает для меня:

data <- readLines("text.txt")
data[nchar(data)==0]="\n"
data = strsplit(paste(data,collapse=""),"\n")[[1]]
data[grepl("discount rate",data,ignore.case = T)]

Я добавил \n в качестве фиктивного для новых строк, поэтому я могу разделить это в аргументе strsplit. Функция возвращает только второй абзац. Надеюсь это поможет!

person Florian    schedule 31.07.2017
comment
Это решение отлично работает для моего приложения, так как я извлекаю все свои текстовые файлы из каталога в Интернете, спасибо! - person Kevin Ocampo; 31.07.2017

Если вы не хотите менять разрывы строк в тексте, вы можете сделать что-то вроде этого (txt - это строковый вектор в вашем вопросе)

# generate a variable for paragraph number
df <- data.frame(txt, paragraph = cumsum(txt == "")) 
# find  paragraphs with the search term
keep_paragraph <- df[grep("discount rate", df[, "txt"]), "paragraph"] 
# subset the data.frame
df <- df[df$paragraph %in% keep_paragraph,] 
person amatsuo_net    schedule 31.07.2017
comment
Хорошее решение, я изо всех сил пытался разделить строки на абзацы, но это очень хорошо решает, +1 - person Florian; 31.07.2017