Я пытаюсь использовать dateparser
для разбора дат с годами ранее, чем 1000, с менее чем четырьмя цифрами.
import dateparser
value = "july 900"
result = dateparser.parse(value)
result is None # True
Сначала я подумал, что это связано с проблемой, упомянутой здесь: Использовать datetime.strftime () в годы до 1900 года? («Требуется год> = 1900») , поскольку в некоторых случаях с определенными входными данными (например, просто 900
) результатом были текущий день и месяц в сочетании с годом 1900
.
Но после еще нескольких испытаний со случайными датами и относительными выражениями я заметил, что dateparser
может выводить даты раньше, чем 1000
, затем я понял, что если я добавлю ноль к году, результат будет правильным.
import dateparser
value = "july 0900"
result = dateparser.parse(value)
result is None # False
result # datetime.datetime(900, 7, 4, 0, 0)
Я нашел это в поиске решения:
https://github.com/scrapinghub/dateparser/issues/410
но последний комментарий оставил мне больше вопросов, чем ответов, так как мне не удалось найти способ передать пользовательский парсер внутреннему пользователю dateutil.parser
из dateparser
.
Мое текущее решение состоит в том, чтобы искать регулярные выражения трехзначного года, используя что-то похожее на это: (.* +| *|.+[\/\-.]{1,})([1-9][0-9]{2,})( *| +.*|[\/\-.]{1,}.+)
и вставлять их на место.
Есть ли лучший способ сделать это?
EDIT:
Существует ли элегантное решение для анализа дат до нашей эры (например, до н.э.)? (кажется, что dateparser
клавиша настроек SUPPORT_BEFORE_COMMON_ERA
мало что делает в этом отношении, а все остальные, похоже, не связаны)
Так что это можно использовать для археологических раскопок.