Как извлечь значения из строки и использовать эти значения в запросе к базе данных? - PullRequest
0 голосов
/ 16 апреля 2019

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

Моя таблица содержит 10000 строк и выглядит следующим образом:

Car type | Owner
------------------
Sedan    | John
Hatchback| Mary

Пример вопроса, на который я хотел бы, чтобы программа ответила:

"Кто приобрелседан? "

В идеале, правильный ответ здесь будет John.

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

Что означает, что двигатель должен:

  1. Понять, что «седан» в предложении «Кто купил седан» является сущностью (типом автомобиля), и перевести его как Car Type = Sedan.

  2. Понимать, что слово «купленный» в предложении означает то же самое, что и «владелец».

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

Конечная цель - понять сущности в этом предложении и преобразовать их в запрос SQL.

1 Ответ

0 голосов
/ 16 апреля 2019

То, что вы ищете, называется NLTK , что означает набор инструментов для естественного языка (обработки).

Чтобы дать вам представление о том, на что способна эта библиотека, вот демонстрационный код с домашней страницы NLTK, показывающий, как маркировать и тегировать текст:

import nltk
sentence = "At eight o'clock on Thursday morning Arthur didn't feel very good."
tokens = nltk.word_tokenize(sentence)
print(tokens)
tagged = nltk.pos_tag(tokens)
print(tagged[0:6])

Ожидаемый результат:

['At', 'eight', "o'clock", 'on', 'Thursday', 'morning', 'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
[('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), ('on', 'IN'), ('Thursday', 'NNP'), ('morning', 'NN')]

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

Например, если вам нужно ответить только на несколько вопросов, таких как:

«Кому принадлежит [x] тип автомобиля?»

«Сколько людей владеет [x] типом автомобиля?»

«Какой тип машины [x] принадлежит?»

Вы можете использовать Regex для поиска совпадений по заранее заданным вопросам:

import re

# get the question
question = "What kind of car does Joe own?"

# use regex to find matches for predefined question formats
car_type_for_match = re.findall(r"What type of car does (.*?) own\?", question)

if car_type_for_match and len(car_type_for_match) > 0:
  print("Car type for: {}".format(car_type_for_match))

Который вы можете позже расширить с помощью if операторов, чтобы добавить больше вопросов.

Удачи.

...