Извлечь из строки информацию о дате / времени - PullRequest
0 голосов
/ 26 мая 2020

У меня есть тексты, которые обычно начинаются с:

“12 minutes ago - There was a meeting...”
“2 hours ago - Apologies for being...”
“1 day ago - It is a sunny day in London...”

и так далее. В основном у меня есть информация о:

Minutes 
Hours
Day (starting from today)

Я хотел бы преобразовать эту информацию в ценную информацию времени ser ie, чтобы извлечь эту часть и создать новый столбец из этого (Datetime). В моем наборе данных есть один столбец (Дата), где у меня уже есть дата, когда было проведено исследование (например, сегодня), в этом формате: 26/05/2020 и когда был отправлен поиск (например, 8:41. ). Поэтому, если текст начинается с «12 минут назад», у меня должно быть:

26/05/2020 - 8:29 (datetime format in Python)

А для других:

26/05/2020 - 6:41
25/05/2020 - 8:41

Важно, чтобы что-то было (строка, числа c, формат даты), который я могу построить как временной ряд (я хотел бы увидеть, сколько текстов было опубликовано с точки зрения временного интервала). Есть идеи, как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Если формат остается простым: <digits> <unit> ago ... довольно просто разобрать с помощью "^(\d+) (\w+) ago".

Затем, когда у вас будет ('minutes', '12'), вы передадите их в timedelta, который принимает каждую единицу как аргумент ключевого слова timedelta(minutes=12), вы сделаете это, передав сопоставление **{unit:value}

def parse(content):
    timeparts = re.search(r"^(\d+) (\w+) ago", content)
    if not timeparts:
        return None, content
    unit = timeparts.group(2).rstrip('s') + 's' # ensure ends with 's'
    #return datetime.now()-timedelta(**{unit:int(timeparts.group(1))})           # Now date
    return datetime(2020,5,26,8,0,0)-timedelta(**{unit:int(timeparts.group(1))}) # Fixed date

Demo

values = ["12 minutes ago - There was a meeting...","2 hours ago - Apologies for being...","1 day ago - It is a sunny day in London..."]

for value in values:
  res = parse(value)
  print(res)


2020-05-26 07:48:00
2020-05-26 06:00:00
2020-05-25 08:00:00
0 голосов
/ 26 мая 2020

Вы должны использовать для этого библиотеку обработки естественного языка, например spaCY или NLTK

Вот пример tokenization из приведенной выше ссылки, показывающий, как spacY разбивает предложение :

enter image description here

...