https://habr.com/ru/post/449184/Мы в компании создаем сервис, который извлекает юридические факты из переписки клиента и заказчика. Сервис вырос из одной простой идеи — мои постоянные клиенты из решили упросить работу менеджерам и создать “генератор договоров”. Первую задачу — подтягивать в договор реквизиты клиента и заказчика мы решили легко.
Появилась вторая идея — искать в переписке даты и вставлять их в техническое задание, документы, автоматически.
Однако, люди редко пишут в чатах и мессенджерах даты так, чтобы их легко мог распознать алгоритм.
“We start next week”, «this friday» — если менеджеры сравнительно легко могут нучиться писать даты в правильном формате, то к клиентам ты не можешь предъявить таких требований.
Я пишу на python и на помощь сразу пришла python NLP-библиотека spaCy* — NER (name entity recognition) модуль которой легко извлекал даты из переписки с англоязычными клиентами. В результате мы получили кучу относительных дат: «in two weeks»,«friday», «this friday», «this noon», «wensday noon».
Но как перевести эти даты в объекты, которые воспринимает сервис (datetime object)?
Началось длительное путешествие в область “human readable dates parsing”. Обозревая окрестности я нашел только три python библиотеки, которые заработали сразу и без мучений: это timefhuman**, dateparser*** и datefinder***.
На картинке сравнение трех библиотек:
В целом видно, что не избалованная вниманием timefhuman оказалась более удобной, хотя и с большим количеством ложных срабатываний, чем dateparser которым пользуется большинство.
Интересна логика разработчиков парсинг “пятницы” дал будущую пятницу в случае timefhuman и прошлую пятницу в dateparser.
В целом timefhuman оказался более живым и был выбран для дальнейшей разработки и тестирования прототипа.
*
spacy.io
**
github.com/alvinwan/timefhuman
***
github.com/scrapinghub/dateparser
****
github.com/akoumjian/datefinder