Python: задайте вопрос, найдите тот, который похож в базе данных - PullRequest
0 голосов
/ 11 сентября 2018

Я пишу бота Telegram, который отвечает на вопросы людей о конкретном городе. Я хотел написать фрагмент кода, который сравнивает сообщение с вопросами, которые у меня есть в моей таблице базы данных sqlite.

Самая большая проблема в том, что я не могу использовать difflib.get_close_matches, потому что вопросы не на английском , и на данный момент я работаю только с точно совпадающими строками, например:

if msg.lower() == "what can you do?":
    send_message("I can answer to any question you have about...", chat_id)

И это определенно НЕ моя цель

Итак, давайте перейдем к коду: я использую эту функцию, чтобы получить последнее сообщение

URL = "https://api.telegram.org/bot{}/".format(TOKEN)

def get_updates(offset=None):
url = URL + "getUpdates"
if offset:
    url += "?offset={}".format(offset)
js = get_json_from_url(url)
return js

и присвоить возвращаемое значение переменной updates, в результате у меня будет текст сообщения в update["message"]["text"]

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

НО это сделало бы работу программы очень медленной, и у меня нет ни времени, ни желания составлять список синонимов для каждого возможного слова

Может кто-нибудь помочь мне найти способ сделать сравнение и найти похожую строку в БД, чтобы программа работала как можно быстрее?

1 Ответ

0 голосов
/ 11 сентября 2018

Мне жаль говорить, что, вероятно, не существует простого и легкого способа пойти с чем-то вроде этого:

Поскольку вы имеете дело с базой данных, я предполагаю, что у вас есть широкий диапазонвозможные вопросы, и что использование простой таблицы синонимов не подойдет

Обработка естественного языка (NLP)

Это очень активная тема исследования в области машинного обучения и, вКороче говоря, имеет дело с автоматическим осмыслением текста.Для вашего конкретного сценария.Чтобы получить некоторую интуицию по этому поводу, и поскольку она идеально подходит для вашего вопроса, я бы рекомендовал начать с: Расчет сходства вопросов для ответов на часто задаваемые вопросы от Song et al.(2007)

Для современного инструмента, который поможет с вашим приложением, я предлагаю word2vec (это документ, но вы также можете следовать tutorial .

Другие варианты

Если НЛП выглядит более сложным, чем то, к чему вы стремитесь, я бы посоветовал взглянуть на сходство слов, например:

Они, однако, не будут работать так же хорошо, как хорошо обученная система НЛП.

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