Возврат текста между начальным и конечным регулярным выражением - PullRequest
0 голосов
/ 01 октября 2018

Я работаю над регулярным выражением, чтобы извлечь некоторый текст из файлов, загруженных из базы данных газеты.Файлы в основном хорошо отформатированы.Однако полный текст каждой статьи начинается с четко определенной фразы ^Full text:.Однако окончание полного текста не разграничено.Лучшее, что я могу понять, это то, что полный текст заканчивается различными тегами метаданных, которые выглядят так: Subject: , CREDIT:, Credit.

Итак, я, конечно, могу получить начало статьи.Но мне очень трудно найти способ выбрать текст между началом и концом полного текста.

Это осложняется двумя факторами.Во-первых, очевидно, что конечная строка меняется, хотя я чувствую, что могу остановиться на чем-то вроде: `^ [: alnum:] {5,}: ', и это захватит окончание.Но другой сложный фактор заключается в том, что есть похожие теги, которые появляются до начала полного текста.Как получить R только для того, чтобы вернуть текст между регулярным выражением полного текста и конечным регулярным выражением?

test<-c('Document 1', 'Article title', 'Author: Author Name', 'https://a/url', 'Abstract: none', 'Full text: some article text that I need to capture','the second line of the article that I need to capture', 'Subject: A subject', 'Publication: Publication', 'Location: A country')

test2<-c('Document 2', 'Article title', 'Author: Author Name', 'https://a/url', 'Abstract: none', 'Full text: some article text that I need to capture','the second line of the article that I need to capture', 'Credit: A subject', 'Publication: Publication', 'Location: A country')

Моя текущая попытка здесь:

test[(grep('Full text:', test)+1):grep('^[:alnum:]{5,}: ', test)]

Спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Это просто ищет элемент, соответствующий 'Full text:', затем следующий элемент после этого соответствия ':'

get_text <- function(x){
  start <- grep('Full text:', x)
  end <- grep(':', x) 
  end <- end[which(end > start)[1]] - 1
  x[start:end]
}

get_text(test)
# [1] "Full text: some article text that I need to capture"  
# [2] "the second line of the article that I need to capture"
get_text(test2)
# [1] "Full text: some article text that I need to capture"  
# [2] "the second line of the article that I need to capture"
...