用Python构建推理引擎

Art*_*Art 8 python parsing rule-engine expert-system

我正在寻找方向并尝试标记此问题:

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

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

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

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

例:

"90001" - 一个令牌,与zipcode正则表达式匹配,对于仅包含zipcode的字符串存在规则会导致某种行为发生

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

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

谢谢!

mjv*_*mjv 6

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

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

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>
Run Code Online (Sandbox Code Playgroud)

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

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

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