Как извлечь фактическую дату из строки, используя dateparser? - PullRequest
0 голосов
/ 11 февраля 2019

Вопрос

Когда я ищу дату в строке, используя dateparser, мне дают кортеж, который включает в себя как дату в виде строки, так и объект datetime.datetime.нужно только строку и где их несколько, если это возможно, каждое по отдельности.

Есть идеи о том, как я могу изолировать текст от результата - удаление объекта datetime.datetime?

Причина:

Я хочу использовать переменную, чтобы затем проанализировать слово до найденной даты.

from dateparser.search import search_dates
para = search_dates("Competition opens 1/03/19 at 6:00 AM and closes 17/05/19 at 5:00 PM", settings={'STRICT_PARSING': True, 'DATE_ORDER': 'DMY'})
for x in para[0]:
    print (x)
    print(type(x))

Я ищу «1/03/19 в 6:00 утра» и «

Вывод:

1/03/19 at 6:00 AM and
<class 'str'>
2019-03-01 06:00:00
<class 'datetime.datetime'>

Попытки

Я пробовал следующее:

Первый:

from dateparser.search import search_dates
para = search_dates("Competition opens 1/03/19 at 6:00 AM and closes 17/05/19 at 5:00 PM", settings={'STRICT_PARSING': True, 'DATE_ORDER': 'DMY'})
for x in para[0]:
    date_time = x[0]
    date_string =  x[1]
    print(date_time)

Выход:

TypeError: 'datetime.datetime' object is not subscriptable

А также,это:

from dateparser.search import search_dates
para = search_dates("Competition opens 1/03/19 at 6:00 AM and closes 17/05/19 at 5:00 PM", settings={'STRICT_PARSING': True, 'DATE_ORDER': 'DMY'})
for x in para[0]:
    print (x(0))

Вывод:

TypeError: 'str' object is not callable

Наконец:

from dateparser.search import search_dates
para = search_dates("Competition opens 1/03/19 at 6:00 AM and closes 17/05/19 at 5:00 PM", settings={'STRICT_PARSING': True, 'DATE_ORDER': 'DMY'})
for x in para:
    date_string =  x[0]
    print(date_string)
    print(type(date_string))

Вывод:

1/03/19 at 6:00 AM and
<class 'str'>
17/05/19 at 5:00 PM
<class 'str'>

1 Ответ

0 голосов
/ 11 февраля 2019

Кортеж содержит два элемента, как вы указали.Строка и объект datetime.Например,

('1/03/19 at 6:00 AM and', datetime.datetime(2019, 3, 1, 6, 0))
  • Вы можете выделить только строку, проиндексировав кортеж.

Например

from dateparser.search import search_dates
para = search_dates("Competition opens 1/03/19 at 6:00 AM and closes 17/05/19 at 5:00 PM", settings={'STRICT_PARSING': True, 'DATE_ORDER': 'DMY'})
for x in para:
    date_string =  x[0]
    print(date_string)

Вы также можете удалить 'и' из текста.Вы можете сделать это, раздев это.Т.е.

date_string = x[0].strip('and')

output

1/03/19 at 6:00 AM 
17/05/19 at 5:00 PM

Если вы хотите использовать только строки и полностью отказаться от даты и времени, используйте понимание списка для создания para переменная.В приведенном ниже примере para заполняется просто списком строк, а не кортежей.Дата и время полностью отбрасываются

para = [d[0] for d in search_dates("Competition opens 1/03/19 at 6:00 AM and closes 17/05/19 at 5:00 PM", settings={'STRICT_PARSING': True, 'DATE_ORDER': 'DMY'})]
print(para)
# Output is just a 1D list of strings
# ['1/03/19 at 6:00 AM and', '17/05/19 at 5:00 PM']
print(para[0].strip('and'))
# Output is first string in the list with 'and' stripped off
# 1/03/19 at 6:00 AM
...