Это достаточно сложный и нетривиальный вопрос. Однако, если ваша область ограничена (запросы к базе данных сотрудников и т. д.), и вы ожидаете только ограниченный набор высказываний в качестве входных данных, вы можете создать простую систему, основанную на правилах.
Самым простым решением было бы разработать набор правил преобразования на основе регулярных выражений. Например. предположим, что слово, стоящее после (was|were), является глаголом. Вы можете вести словарь всех частых глаголов и их сопоставлений с полями вашей базы данных. Здесь «рожденный» будет сопоставлен с полем, которое можно назвать, например, DATE_OF_BIRTH.
Более сложным решением, основанным на правилах, было бы найти или создать синтаксический анализатор для выбранного вами языка и выполнить преобразование на основе выходных данных синтаксического анализатора и вашей базы правил. Например. Синтаксический анализатор выведет, что такое предикат предложения, подлежащее и т. д. У вас будет набор правил, которые будут переставлять эти части предложений, чтобы создать императивную структуру.
Если вам не нравится идея разработки базы правил вручную, вы всегда можете попробовать подход машинного обучения и обучить статистическую систему. Здесь вам нужно разработать базу данных вопросов, которая охватывает большинство типов вопросов, которые вы могли бы ожидать, и обучить на ней статистическую модель.
Если бы я предложил единую библиотеку/инструмент для экспериментов с любым из вышеперечисленных подходов, я бы назвал OpenNLP.
person
Tomek
schedule
22.10.2014