用Python构建推理引擎

8

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

我正在尝试在Python中构建一个简单的推理引擎(是否有更好的名称?),它将接收一个字符串,并且 -

1- 通过创建一个由空格分隔的值列表来创建一个令牌列表

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

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

例如:

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

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

我正在努力完成第3步,即更高级别的规则。 我相信一定存在某些框架。 有什么想法吗? 另外,您如何描述这个问题? 基于规则的系统,专家系统,推理引擎还是其他什么?

谢谢!


1
1-3 对我来说更像是解析器而不是推理引擎。#1 + #2 = 分词 #3 = 解析那么很可能 #4 = 根据解析器的结果执行操作。请查看 pyparsing。 - user97370
2个回答

6
我很惊讶第三步是让你感到困扰的...
假设您可以正确地标记/分类每个令牌(并且在分类之前您可以找到适当的令牌,因为可能有许多模棱两可的情况...),"Step #3"问题似乎可以轻松地用上下文无关文法来解决,在该文法中,每个所需操作(例如ZIP代码查找或数学表达式计算...)都将是符号,其生成规则本身由可能的令牌类别组成。为了用BNF符号表示这一点,我们可以有类似于:
<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>

也许你的担忧是,当事情变得复杂时,用非冲突语法规则表达整个需求会变得困难。或者你担心可能会动态添加规则,从而迫使语法“编译”逻辑与程序集成?无论是哪种担忧,我认为这第三步相对来说是微不足道的。
另一方面,除非各种类别(和底层输入文本)也能用正则语言描述(正如你在问题中所暗示的那样),否则文本解析器和分类器(步骤#1和#2...)通常是一项不太简单的任务。
一些简化编写和评估语法的Python库示例:
- pijnu - pyparsing

感谢指向pyparsing。CFG是正确的选择。 - Art
@Art,解析库的功劳归功于Max S,他友善而恰当地编辑了答案。我会尝试给他的回答点赞来“表扬”他;-) - mjv

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接