用Python构建推理引擎

时间:2010-02-06 03:57:19

标签: python parsing rule-engine expert-system

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

我试图在Python中构建一个简单的推理引擎(有更好的名字吗?),它将带一个字符串并且 -

1 - 只需创建一个空格分隔值列表

即可创建一个令牌列表

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

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

示例:

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

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

我正在努力学习如何最好地完成第3步,更高级别的规则。我确信某些框架必须存在。有任何想法吗?另外,你如何描述这个问题?基于规则的系统,专家系统,推理引擎,还有什么?

谢谢!

2 个答案:

答案 0 :(得分:6)

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

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

的东西
<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>

也许你担心的是,当事情变得复杂时,很难用非冲突的语法规则来表达整个要求。或许您关心的是可以动态添加规则,从而迫使语法“编译”逻辑与程序集成?无论担心什么,我认为第三步将相对平缓。

另一方面,除非各种类别(和基础输入文本)能够用常规语言描述(如您在问题中暗示的那样),否则文本解析器和分类器(步骤#1和#2 ......)通常不是一件轻而易举的事。

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

答案 1 :(得分:2)

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