#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.