Na empresa, criamos um serviço que extrai fatos legais da correspondência do cliente e do cliente. O serviço surgiu de uma idéia simples - meus clientes regulares decidiram simplificar o trabalho dos gerentes e criar um "gerador de contrato". A primeira tarefa - puxar os detalhes do cliente e do cliente para o contrato, decidimos facilmente.
Uma segunda idéia surgiu - procurar datas na correspondência e inseri-las nos termos de referência, documentos automaticamente.
No entanto, as pessoas raramente escrevem datas em bate-papos e mensagens instantâneas para que o algoritmo possa reconhecê-las facilmente.
"Começamos na próxima semana", "nesta sexta-feira" - se os gerentes forem relativamente fáceis de aprender a escrever datas no formato correto, você não poderá fazer tais demandas aos clientes.
Eu escrevo em python e o python veio imediatamente para o módulo spaCy * - NER (reconhecimento de entidade de nome) da biblioteca NLP de resgate, que recuperava facilmente datas da correspondência com clientes falantes de inglês. Como resultado, temos várias datas relativas: "em duas semanas", "sexta-feira", "nesta sexta-feira", "este meio-dia", "quarta-feira ao meio-dia".
Mas como converter essas datas em objetos que o serviço percebe (objeto de data e hora)?
Uma longa jornada começou na área de “análise de datas legíveis por humanos”. Examinando os arredores, encontrei apenas três bibliotecas python que funcionavam imediatamente e sem tormento: estas são timefhuman **, dateparser *** e datefinder ***.
A imagem mostra uma comparação de três bibliotecas:

Em geral, é claro que o humano do tempo, não estragado pela atenção, se mostrou mais conveniente, embora com um grande número de falsos positivos, do que o analisador de data usado pela maioria das pessoas.
Uma lógica interessante dos desenvolvedores analisando “Friday” deu a sexta-feira futura no caso de timefhuman e a sexta-feira passada no analisador de datas.
Em geral, o timefhuman mostrou-se mais vivo e foi selecionado para o desenvolvimento e teste do protótipo.
*
spacy.io**
github.com/alvinwan/timefhuman***
github.com/scrapinghub/dateparser****
github.com/akoumjian/datefinder