Извличане на дати във всеки формат от текст в R

Искам да извлека дати от дадения текст, датите могат да бъдат във всякакъв формат 10 април 2018 г., 10-04-2018 г., 10/04/2018, 2018/04/10, 04.10.2018 като в други формати ....

Имам новинарски данни и искам да извлека дати от текста

например: Моят приятел идва на 10 юли 2018 г. или 07.10.2018 г.

искам да извлека дата от дадения текст

Моля помогнете

Благодаря предварително


person rachit    schedule 03.05.2018    source източник
comment
Какво сте опитвали досега?   -  person patL    schedule 03.05.2018
comment
Няма чудотворно решение, трябва да изброите всички формати, които можете да имате във вашия текст, и да се заемете с всеки формат.   -  person byouness    schedule 03.05.2018
comment
Опитайте да започнете с регулярните изрази от тук. Ако закъсате, публикувайте там, където закъсате.   -  person phiver    schedule 03.05.2018
comment
Разгледайте пакета anytime. Функцията anydate може да е полезна   -  person Mike H.    schedule 03.05.2018
comment
Обърнете внимание, че ако не знаете формата, случаите може да са двусмислени (3/4/18 3 април ли е или 4 март?).   -  person iod    schedule 03.05.2018


Отговори (4)


извличаме го с помощта на str_extract и след това с anydate получаваме формата

library(anytime)
library(stringr)
anydate(str_extract_all(str1, "[[:alnum:]]+[ /]*\\d{2}[ /]*\\d{4}")[[1]])
#[1] "2018-07-10" "2018-10-07"

данни

str1 <- "My Friend is coming on july 10 2018 or 10/07/2018"
person akrun    schedule 03.05.2018
comment
@rachit Тук съответства една или повече буквено-цифрови ([[:alnum:]]+), последвани от нула или повече интервал + наклонена черта ([ /]*), последвана от две цифри, след това интервал или наклонена черта и четирите цифри. Това основно съответства на july 10 2018 или 10/07/2018 и се преобразува в клас Date с anydate - person akrun; 05.05.2018

parsedate работи добре за тези неща.

library(parsedate)

dates = c("April 10 2018", "10-04-2018", "10/04/2018", "2018/04/10", "04.10.2018")
parsedate::parse_date(dates)

[1] "2018-04-10 UTC" "2018-10-04 UTC" "2018-10-04 UTC" "2018-04-10 UTC" "2018-10-04 UTC"
person Lucas    schedule 07.05.2020

Предложеното решение се проваля, без очевидна причина, със следния низ:

txt = „Преглед на живо, тъй като данните за заплатите в САЩ показват голям ръст на безработицата, след като съставните данни за PMI показват, че бизнес активността в Обединеното кралство е спаднала до рекордно ниско ниво през март след блокирането на Covid-19“ parsedate::parse_date(txt)

person sotnik    schedule 06.05.2020

Анализаторът е хубав пакет, но се проваля със следния низ

txt = "Live coverage as American payrolls data shows big rise in unemployment, after composite PMI data shows UK business activity sunk to a record low in March following the Covid-19 lockdown" 
> parsedate::parse_date(txt) [1] "2020-03-19 UTC"
[1] "2020-03-19 UTC"
person sotnik    schedule 07.05.2020