Создание механизма вывода в Python - PullRequest
8 голосов
/ 06 февраля 2010

Я ищу направление и пытаюсь обозначить эту проблему:

Я пытаюсь создать простой механизм вывода (есть ли лучшее имя?) В Python, который будет принимать строку и -

1 - создать список токенов, просто создав список значений, разделенных пробелами

2 - классифицировать эти токены, используя регулярные выражения

3 - использовать набор правил более высокого уровня для принятия решений на основе категоризации

Пример:

"90001" - один токен, соответствует регулярному выражению почтового индекса, существует правило для строка, содержащая только почтовый индекс , вызывающая определенное поведение

"30 + 14" - три токена, регулярные выражения для числового значения и математические операторы совпадают, для существует правило, числовое значение, за которым следует математический оператор, за которым следует другое числовое значение , вызывает определенное поведение

Я борюсь с тем, как лучше всего выполнить шаг № 3, набор правил более высокого уровня. Я уверен, что некоторые рамки должны существовать. Есть идеи? Кроме того, как бы вы охарактеризовали эту проблему? Система, основанная на правилах, экспертная система, механизм логического вывода, что-то еще?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 06 февраля 2010

Я очень удивлен, что шаг № 3 доставляет вам неприятности ...

Предполагая, что вы можете правильно маркировать / классифицировать каждый токен (и что до категоризации вы можете найти правильные токены, так как может быть много неоднозначных случаев ...), проблема "Step # 3" кажется такой, что можно легко справиться с контекстно-свободной грамматикой , где каждое из желаемых действий (таких как поиск по почтовому индексу или вычисление математических выражений ...) будет символами с их производственным правилом, состоящим из возможных категорий токенов. Чтобы проиллюстрировать это в нотации BNF, у нас может быть что-то вроде

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>

Может быть, вы обеспокоены тем, что, когда все усложняется, становится трудно выразить все требование в терминах неконфликтующих грамматических правил. Или, может быть, вы обеспокоены тем, что можно динамически добавлять правила, что заставляет интегрировать логику грамматики «компиляция» с программой? Безотносительно беспокойства, я думаю, что этот третий шаг будет сравнительно тривиальным.

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

Некоторые примеры библиотек Python, которые упрощают написание и оценку грамматик:

2 голосов
/ 01 октября 2011

Похоже, вы ищете библиотеку "Грамматический вывод" (грамматическая индукция).

...