我试图在Python中构建一个推理系统,它将根据我的知识库中的现有语句来判断查询是否可以推断。你知道吗
输入为:
Predicate1(x,y) ^ Predicate2(x,y,z) ^ Predicate3(y,z) ^ Predicate4(Constant,z) => Predicate5(r)
Predicate1(X1,Y1)
Predicate1(X1,Y2)
Predicate1(X4,Y5)
Predicate2(X1,Y1,Z1)
Predicate2(X4,Y2,Z1)
Predicate3(Y2,X1)
Predicate3(Y1,Z1)
Predicate4(Constant1,Z1)
Predicate4(Constant2,Z5)
我的查询是谓词5(R1)。你知道吗
所以1的LHS。我的问题必须是真的。你知道吗
谓词的所有参数要么是变量(小写),要么是常量(从大写开始),要么是常量和变量的混合体,可以有任意数量的参数。你知道吗
我正在使用递归反向链接方法来计算每个谓词的所有可能值——每个都是Predicate1、Predicate2等的值,它返回一个字典列表。你知道吗
例如,LHS上的每个连接点
谓词1将具有[{'x':'X1','y':'Y1'},{'x':'X1','y':'Y2'},{'x':'X4','y':'Y5'}]
谓词2将有[{'x':'X1','y':'Y1','z':'Z1'},{'x':'X4','y':'Y2','z':'Z1'}]
谓词3将有[{'y':'Y2','z':'X1'},{'y':'Y1','z':'Z1'}]
谓词4将有[{'z':'Z1'},{'z':'Z5}]
我想到的方法是创建一个新的变量到值列表映射(另一个字典),方法是扫描每个谓词的所有字典,删除其他谓词字典中不存在的变量的值,如果还不存在,则向这个字典添加新变量。你知道吗
这里的问题是它必须是正确的组合。例如,由于Predicate1的字典,Predicate2的{'x':'X4','y':'Y2','z':'Z1'}
不能为true(Predicate1没有'x':'X4'和'y':'Y2'。你知道吗
我基本上需要计算所有谓词中为真的公共变量到值,并返回它们。如果一个或多个这样的组合不存在,则返回False;否则返回list和True。你知道吗
对于上述示例,“x”应仅取“X1”,“y”仅取“Y1”,“z”:“Z1”。 i、 例如,输出应该是[{x:'X1','y':'Y1','z':'Z1'}]
我应该使用itertools或类似的方法来实现这一点吗?你有没有想过要怎么做?你知道吗
任何帮助都将不胜感激!谢谢!你知道吗
看起来你需要OrderedDict来解决你的问题。它将保证你的字典总是按同样的顺序来的。你知道吗
相关问题 更多 >
编程相关推荐