用Python构建推理机

用Python构建推理机,python,parsing,rule-engine,expert-system,Python,Parsing,Rule Engine,Expert System,我正在寻找方向,并试图给这个问题贴上标签: 我正在尝试用Python构建一个简单的推理引擎(有更好的名称吗?),它将使用字符串和- 1-只需创建空白分隔值列表,即可创建令牌列表 2-使用正则表达式对这些标记进行分类 3-使用更高级别的规则集根据分类做出决策 例如: “90001”-一个标记,与zipcode regex匹配,对于只包含zipcode的字符串存在一个规则,该规则会导致发生某种行为 “30+14”-三个标记,用于数值和数学运算符匹配的正则表达式,存在一个规则,用于一个数值后跟一个数学

我正在寻找方向,并试图给这个问题贴上标签:

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

1-只需创建空白分隔值列表,即可创建令牌列表

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

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

例如:

“90001”-一个标记,与zipcode regex匹配,对于只包含zipcode的字符串存在一个规则,该规则会导致发生某种行为

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

我正在为如何最好地完成第3步而挣扎,这是一套更高层次的规则。我确信一定存在某种框架。有什么想法吗?另外,您如何描述这个问题?基于规则的系统、专家系统、推理机等等


谢谢

我很惊讶第三步会给你带来麻烦

假设您可以正确地标记/分类每个标记(并且在分类之前,您可以找到正确的标记,因为可能存在许多不明确的情况……,那么“步骤3”问题似乎可以通过上下文无关语法轻松解决,其中每个所需操作(如邮政编码查找或数学表达式计算…)将是符号,其生成规则本身由可能的标记类别组成

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>
:=
可能您担心的是,当事情变得复杂时,很难用不冲突的语法规则来表达整个需求。或者您担心的是可以动态添加规则,从而强制语法“编译”与程序整合的逻辑?不管是什么问题,我认为这第三步相对来说是微不足道的

另一方面,除非各种类别(以及底层输入文本)也可以用常规语言描述(正如您在问题中所暗示的那样),否则文本解析器和分类器(步骤1和步骤2…)通常不那么简单

简化编写和计算语法的一些示例Python库:


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

1-3对我来说更像是一个解析器,而不是一个推理引擎。#1+#2=tokenize#3=parse然后大概是#4=act-on-the-result-of-the-parser。检查pyparsing。感谢pyparsing的指针。CFG是一个不错的选择。@Art,解析库的功劳归于Max S,他友好而恰当地编辑了答案。我会试着把他自己的一些答案投给“给他看”;-)