Reconociendo fechas escritas en lenguaje natural usando Python3

En la empresa, creamos un servicio que extrae hechos legales de la correspondencia del cliente y el cliente. El servicio surgió de una idea simple: mis clientes habituales decidieron simplificar el trabajo de los gerentes y crear un "generador de contratos". La primera tarea: extraer los detalles del cliente y el cliente en el contrato, decidimos fácilmente.

Surgió una segunda idea: buscar fechas en la correspondencia e insertarlas en los términos de referencia, documentos automáticamente.

Sin embargo, las personas rara vez escriben fechas en chats y mensajeros instantáneos para que el algoritmo pueda reconocerlos fácilmente.

"Comenzamos la próxima semana", "este viernes": si los gerentes son relativamente fáciles de aprender a escribir fechas en el formato correcto, entonces no se puede exigir a los clientes.

Escribo en python y python vino inmediatamente al módulo de rescate NLP-library spaCy * - NER (reconocimiento de entidad de nombre) que recuperaba fácilmente las fechas de la correspondencia con clientes de habla inglesa. Como resultado, obtuvimos un montón de fechas relativas: "en dos semanas", "viernes", "este viernes", "este mediodía", "mediodía del miércoles".

¿Pero cómo traducir estas fechas en objetos que el servicio percibe (objeto datetime)?
Comenzó un largo viaje en el área de "análisis de fechas legibles por humanos". Examinando los alrededores, encontré solo tres bibliotecas de python que funcionaban de inmediato y sin tormento: estas son timefhuman **, dateparser *** y datefinder ***.

La imagen muestra una comparación de tres bibliotecas:

imagen

En general, está claro que el tiempo humano, no malcriado, resultó ser más conveniente, aunque con una gran cantidad de falsos positivos, que el analizador de fechas que usa la mayoría de las personas.
Una lógica interesante de los desarrolladores que analizan "Viernes" dio el futuro viernes en el caso de timefhuman y el viernes pasado en el dateparser.

En general, Timefhuman resultó estar más vivo y fue seleccionado para un mayor desarrollo y prueba del prototipo.

* spacy.io
** github.com/alvinwan/timefhuman
*** github.com/scrapinghub/dateparser
**** github.com/akoumjian/datefinder

Source: https://habr.com/ru/post/449184/


All Articles