Синтаксический анализ команд текстовой игры?

#python #nlp

#python #nlp

Вопрос:

Я заинтересован в написании механизма синтаксического анализа, такого как в Inform, который является очень надежным.

Я попробовал несколько разных подходов:

  • регулярное выражение. Для регулярных выражений я могу только сопоставлять {verb} {noun1 optional-noun2} {optional-preposition} {indirect-noun1 optional-indirect-noun2} Это работает не так хорошо.
  • список предопределенных глаголов и соответствующих им предлогов и существительных. Этот подход слишком сложный, поскольку должно быть МНОГО предопределенных данных.
  • разбиение на разные слова и прогон их через словарь maps. Опять же, это слишком сложно и непрактично из-за неоднозначности некоторых слов, таких как «посмотреть» или «поместить (включить, вывести)»

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

У меня есть несколько идей:

  • Как я уже сказал, обработка на естественном языке.
  • Создайте анализатор, который анализирует что-то похожее на SQL.

Есть ли какие-либо другие идеи? Как бы я приступил к их разработке и реализации?

Обратите внимание, что я использую Python в качестве своего языка. и на случай, если вы это пропустили, я не разрабатываю язык программирования, я просто разбираю пользовательские команды, такие как «go north» или сложные вещи, такие как «тушите огонь одеялом»

Комментарии:

1. Возможно, вы захотите взглянуть на модуль pyparsing pyparsing. wikispaces.com

2. Я чувствую, что написание моего собственного синтаксического анализатора принесло бы мне больше пользы, поскольку я бы узнал гораздо больше.

3. Весь мой смысл в том, чтобы написать модуль pyparsing, чтобы я мог узнать, как это делается.

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

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

Ответ №1:

Помимо упомянутого pyparsing , который выглядит очень подходящим (я использовал его совсем немного), вам следует изучить возможность использования nltk . Это отличная коллекция инструментов для обработки естественного языка, и есть даже книга.

Комментарии:

1. Да, я тоже это видел: gnu-darwin.org/www001/ports-1.5a-CURRENT/devel/py-parsing/work /…

2. pyparsing вряд ли подходит, поскольку создает анализаторы рекурсивного спуска. Когда ваша грамматика имеет лишь малейшую двусмысленность (которая скоро будет у любого анализатора NL), она полностью остановится; я видел, как это происходило. Вместо этого используйте NLTK.