Вопрос

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

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

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

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

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

Пример:

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

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

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

Спасибо!

Это было полезно?

Решение

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

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top