Извлечение текста из * .txt файлов в R - PullRequest
0 голосов
/ 04 декабря 2018

Я использовал Expressions для Mac, чтобы подтвердить работу Regex, но я не могу найти команду для извлечения информации из моего текстового файла.У меня есть 2500 текстовых файлов, и мне нужно вытащить дату каждого документа, чтобы заполнить набор данных.К вашему сведению, «дата» - первая переменная для извлечения, будут другие.Формат файлов различен и существует несколько дат.Меня интересует только первая дата каждого документа.Некоторые документы имеют новую строку с датой, другие начинают строку со слова «Дата» или «Дата».

Пример каждого текстового документа:

Bangor
dorset
LL56 43r

date:         10 july 2009
take notice:  the blah blah blah text goes here and there's lots of it.
action:

Работающее регулярное выражение:

"\\d{1,2}\\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\\s+\\d{4}"

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

> strapply(NoFN, ("\\d{1,2}\\.?:january|february|march|april|may|june|july|august|september|october|november|december\\.\\d{4}")[[1]]
> [1] 10 july 2009

Очевидно, что на самом деле это не работает!

Большое спасибо!Ian

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Я верю, что это делает это.Он использует встроенную переменную month.name и, в отличие от вопроса, группирует месяцы с ().

txt <- "\n date: 10 july 2009 \n take notice: the blah blah blah text goes here and there's lots of it. action:"

pattern <- paste(tolower(month.name), collapse = "|")
pattern <- paste0("(", pattern, ")")
pattern <- paste("[[:digit:]]{1,2}[[:space:]]*", pattern, "[[:digit:]]{4}")

m <- regexpr(pattern, txt)
regmatches(txt, m)
#[1] "10 july 2009"
0 голосов
/ 04 декабря 2018

Спасибо всем, это доставляет удовольствие!

библиотека (stringr)

txt = "Бангор Дорсет LL56 43r \ n дата: 10 июля 2009 \ n обратите внимание: бла-бла-блатекст идет здесь, и его много. action: "

str_match (string = txt, pattern =" \ d {1,2} \ s + (?: январь | февраль | март | март | апрель | май | май | июнь| июль | август | сентябрь | октябрь | ноябрь | декабрь) \ s + \ d {4} ")

    [,1]          

[1,]" 10 июля 2009 "

0 голосов
/ 04 декабря 2018

Ваше регулярное выражение не подходит для R, потому что вам нужно экранировать символ \.

Регулярное выражение должно быть:

"\\d{1,2}\\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\\s+\\d{4}"

Если вы используете stringrпакет, и ваш текст загружается в txt вы можете сделать:

library(stringr)

txt = "Bangor dorset LL56 43r\n date: 10 july 2009 \n take notice: the blah blah blah text goes here and there's lots of it. action:"

str_match(string = txt, pattern = "\\d{1,2}\\s+(?:january|february|march|april|may|june|july|august|september|october|november|december)\\s+\\d{4}")

        [,1]          
[1,] "10 july 2009"
...