Как определить, возвращает ли dateparser.search.search_dates () дату, время или дату? - PullRequest
2 голосов
/ 14 января 2020

Пытаясь ответить на другой вопрос Я наткнулся на следующую проблему:

dateparser.search.search_dates() возвращает список кортежей, каждый из которых состоит из распознанного текстового сегмента в качестве переноса информации о дате и / или времени и соответствующей datetime (плюс необязательный языковой код, если требуется).

Если сегмент имел тип даты, только поля даты datetime набор. Остальные берутся из текущего времени или из базовой даты и времени, которые могут быть предоставлены через параметр settings. И наоборот, если сегмент был временного типа. Только если в сегменте содержится информация о дате и времени, все поля даты и времени datetime установлены.

☞ Я не нашел способа узнать, какие поля из datetime были установлены и что нет. 101

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

Что я отсутствует? Как отличить даты, время и дату от времени?

Пример кода:

for s in ("Soccer with @homies at Payne Whitney tomorrow at 2 pm to 4 pm!",
          "Soccer with @homies at Payne Whitney tomorrow starting at 2 pm to 4 pm!"):
    print()
    print(s)
    for part in search_dates(s):
        print(part)

Вывод:

Soccer with @homies at Payne Whitney tomorrow at 2 pm to 4 pm!
('tomorrow at 2 pm', datetime.datetime(2020, 1, 15, 14, 0))
('4 pm', datetime.datetime(2020, 1, 14, 16, 0))

Soccer with @homies at Payne Whitney tomorrow starting at 2 pm to 4 pm!
('tomorrow', datetime.datetime(2020, 1, 15, 13, 31, 40, 681832))
('at 2 pm', datetime.datetime(2020, 1, 14, 14, 0))
('4 pm', datetime.datetime(2020, 1, 14, 16, 0))
...