Как извлечь даты из входного текста для чата? - PullRequest
0 голосов
/ 07 июня 2019

Я создаю чат-бота на python.Мне нужно извлечь даты из входного текста от пользователя.Некоторые тестовые примеры могут быть следующими:

1."last week of july"
2." in june"
3. "last month"
4. "last n days"

Это всего лишь пример.После извлечения даты мне нужно построить запрос в SQL.Я горячо закодировал для нескольких случаев.Но когда я думаю, возникает все больше и больше случаев, для которых горячее кодирование может занять много времени.Есть ли встроенная библиотека, которая может облегчить мою работу?

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Вы можете использовать библиотеку dateparser .

import dateparser

nl_dates = ["last week of july", " in june", "last month", "last n days"]

for nl_date in nl_dates:
    res = dateparser.parse(nl_date)
    if res:
         print('"{}"": {}'.format(nl_date,res.date()))

" in june": 2019-06-12
"last month": 2019-05-12

Эта библиотека сможет правильно адресовать 2 из 4 ваших примеров. Кроме того, вам может оказаться полезным использование модели NER (распознавания именованных сущностей), spacy предлагает одну:

import spacy
nlp = spacy.load("en_core_web_sm")
nl_dates = ["last week of july", " in june", "last month", "last 7 days"]

for nl_date in nl_dates:
    doc = nlp(nl_date)
    for entity in doc.ents:
        print('{}: {}'.format(entity.label_, entity.text))

"DATE: last week"
"DATE: last month"
"DATE: last 7 days"

Как правило, вы можете попросить своего чат-бота специально запрашивать дату в формате, который легче обнаружить, когда он не может извлечь ее из текста.

0 голосов
/ 11 июня 2019

Я хотел бы рассмотреть возможность использования API НЛП, таких как Dialogflow или Wit.ai .Лично я предпочитаю Wit.ai, потому что он может распознавать как даты, так и диапазоны дат, а также принимает контекст, который позволяет настроить распознавание в соответствии с часовым поясом пользователя (что может избавить вас от многих проблем - в зависимости от того, сколько временив пользовательской зоне «среда» или «следующая неделя» могут иметь разные толкования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...