8

我正在寻找方向并试图标记这个问题:

我正在尝试在 Python 中构建一个简单的推理引擎(有更好的名称吗?),它将采用一个字符串和 -

1 - 通过简单地创建一个空格分隔值列表来创建一个标记列表

2 - 使用正则表达式对这些标记进行分类

3 - 使用更高级别的规则集根据分类做出决策

例子:

“90001” - 一个标记,与邮政编码正则表达式匹配,存在一个规则,用于仅包含邮政编码的字符串会导致某种行为发生

“30 + 14” - 三个标记,数值的正则表达式和数学运算符匹配,存在一个数值规则,后跟一个数学运算符,后跟另一个数值导致某种行为发生

我正在努力解决如何最好地执行第 3 步,即更高级别的规则集。我确信某些框架必须存在。有任何想法吗?另外,您如何描述这个问题?基于规则的系统、专家系统、推理引擎,还是其他?

谢谢!

4

2 回答 2

6

我很惊讶第 3 步给你带来了麻烦......

假设您可以正确标记/分类每个标记(并且在分类之前您可以找到正确的标记,因为可能存在许多模棱两可的情况......),“步骤#3”问题似乎可以很容易地解决一个上下文无关语法,其中每个所需操作(例如邮政编码查找或数学表达式计算......)都是符号,其产生规则本身由可能的标记类别组成。为了用 BNF 表示法说明这一点,我们可以有类似的东西

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

也许您担心的是,当事情变得复杂时,将很难用不冲突的语法规则来表达整个需求。或者您可能担心可以动态添加规则,从而强制将语法“编译”逻辑与程序集成?不管有什么顾虑,我认为这第三步相对来说是微不足道的。

另一方面,除非各种类别(和基础输入文本)也可以用常规语言来描述(正如您在问题中暗示的那样),否则文本解析器和分类器(步骤 #1 和#2...)通常是一件不那么简单的事情。

一些简化编写和评估语法的示例 Python 库:

于 2010-02-06T04:53:30.983 回答
2

看起来您搜索“语法推理”(语法归纳)库。

于 2011-10-01T09:49:34.170 回答