在Python中构建推理引擎
我在寻找方向,并试图给这个问题打个标签:
我想用Python构建一个简单的推理引擎(有没有更好的名字?),它会接收一个字符串,然后:
1 - 通过将空格分开的值放在一个列表中,创建一个标记列表
2 - 使用正则表达式对这些标记进行分类
3 - 使用一套更高级的规则,根据分类结果做出决策
举个例子:
"90001" - 这是一个标记,符合邮政编码的正则表达式,有一条规则是 仅包含邮政编码的字符串 会导致某种特定的行为发生
"30 + 14" - 这是三个标记,数字值和数学运算符的正则表达式都匹配,有一条规则是 一个数字值后面跟着一个数学运算符,再后面是另一个数字值 会导致某种特定的行为发生
我在第3步,即更高级的规则方面遇到了困难。我相信一定有现成的框架可以用。有什么想法吗?另外,你会如何描述这个问题?是基于规则的系统、专家系统、推理引擎,还是其他什么?
谢谢!
2 个回答
看起来你是在寻找“语法推断”(语法归纳)相关的库。
我很惊讶第3步会让你感到困扰...
假设你能正确地给每个符号打标签或分类(而且在分类之前你能找到合适的符号,因为可能会有很多模糊的情况...),第3步的问题似乎可以通过一种叫做上下文无关文法的方法轻松解决,在这种方法中,每个你想要的操作(比如查找邮政编码或计算数学表达式...)都可以用符号表示,而这些符号的生成规则则由可能的符号类别组成。为了更好地说明这一点,我们可以用BNF表示法写成这样:
<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue>
也许你担心的是,当事情变得复杂时,用不冲突的语法规则来表达整个需求会变得困难。或者你可能担心可以动态添加规则,这样就会迫使语法“编译”逻辑与程序结合在一起?无论是什么担忧,我认为第3步相对来说会比较简单。
另一方面,除非各种类别(以及底层输入文本)可以用一种常规语言来描述(就像你在问题中暗示的那样),否则文本解析器和分类器(第1步和第2步...)通常会比较复杂。
这里有一些可以简化编写和评估语法的Python库: