2010-02-06 91 views
8

我寻求方向,并试图标签这个问题:在Python构建推理引擎

我试图构建一个简单的推理引擎(有没有更好的名字吗?)在Python这将需要一个字符串和 -

1 - 通过简单地创建空格分隔值

2列表创建令牌列表 - 分类这些令牌,使用正则表达式

3 - 用啊的规则,使基础上的归类决定igher水平集

例子:

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

“30 + 14” - 三个令牌,对数值和数学运算符匹配regexs,规则为存在的数值然后是数学运算符,随后另一数值导致发生

某种行为

我正在努力如何做最好的步骤#3,更高层次的规则。我确定一些框架必须存在。有任何想法吗?另外,你如何描述这个问题呢?基于规则的系统,专家系统,推理引擎,还有其他的东西?

谢谢!

+1

1-3对我来说听起来像一个解析器,而不是推理引擎。 #1 +#2 =标记化 #3 =解析 然后推测#4 =对解析器的结果采取行动。 检查pyparsing。 – 2010-02-06 07:42:07

回答

6

我很惊讶的是,步骤#3是一个给你的麻烦......

假设你可以标记/分类正确每个令牌(和分类在此之前,你可以找到正确的令牌,因为可能是许多不明确的情况......),“步骤#3”问题似乎很容易用上下文无关语法处理,其中每个所需的操作(例如邮政编码查找或数学表达式计算... )将是符号,其生产规则本身由可能的令牌类别组成。为了说明这个BNF符号,我们可以有一些像

<SimpleMathOperation> ::= <NumericalValue><Operator><NumericalValue> 

也许你担心的是,当事情变得复杂,它会变得难以表达的不冲突的语法规则方面的整体要求。或者你的担心是可以动态添加规则,从而迫使语法“编译”逻辑与程序集成?无论如何,我认为这第三步相对来说是微不足道的。另一方面,除非各种类别(以及底层输入文本)都可以用常规语言描述(正如您似乎在提问中所暗示的那样),否则文本解析器和分类器(步骤#1和#2 ...)通常不是微不足道的事情。

是简化编写和评价语法一些示例Python库:

+0

感谢指向pyparsing的指针。 CFG是要走的路。 – Art 2010-02-06 18:58:32

+0

@Art,解析库的功劳归功于Max S,他善意地编辑了答案。我会尝试并提出一些他自己的答案来“展示他”;-) – mjv 2010-02-06 19:29:24

2

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