我正在根据文档中spaCy的令牌创建输出。使用真值表,我需要输出所有可能的场景进行测试。输入的数量可能因输入而异。如果可能的话,我希望它可以灵活地以这种方式进行3个以上的输入:((a和b)或c)。
每种情况的输入都具有正(True)或负(False)方面(即,当设置了输入或未设置输入时,因为必须检查所有可能的情况。对于2输入方案,以下结果是目标:
输入:当“输入1被设置”或“输入2不可用”时,“检测到故障”。
输出:
情况1:
案例2:
案例3:
案例4:
对于3个或更多输入,它将成倍增加。
对于“设置输入1”,我保存了一个名为inputset_pos的参数,用于设置它:
inputset_pos = 'Input 1 is set'
并且当未设置参数时,我保存了一个名为inputset_neg的参数:
inputset_neg = 'Input 1 is not set'
我在将数组或列表中的字符串值格式化/提取为我的输出的正确格式时没有问题。我的主要问题是通过n个输入和x个逻辑类型进行迭代。
def truth_table(n):
table = list(itertools.product([False, True], repeat=n))
print(table)
truth_table(3)
这对我不起作用,因为它只处理输入而不是结果输出。
我已经考虑过将输入作为元组添加,将值1或0分配为指示其正或负“版本”的指标,并将真值表定义为2D列表。然后遍历真值表的每个位置,并使用指定的Input语句替换0和1值创建一个新的2D数组。
or_2 = [[0,0,0],
[0,1,1],
[1,0,1],
[1,1,1]]
and_2 = [[0,0,0],
[0,1,0],
[1,0,0],
[1,1,1]]
您为每个因素设置的值(而不是“输出”设置)是可能值的枚举。在这方面,您的输入似乎非常规范,因为该集合由一个状态字组成,该状态字前面带有/没有单词“ not”。因此,您有套
A {"not set", "set"}
B {"not available", "available"}
out {"not Detected", "Detected"}
您用分隔符“ then”来区分。您有4个用例,因为AxB
有4个元素。
如果适合您,可以将这些集合引用为列表或字典。我不确定“ x逻辑类型”是什么意思;如果您要解析逻辑表达式,则需要准确查找该类型的解析器。
在给定的情况下,您需要提取每个子句的信息,并将其体现为第三列“ out”的正数。请注意,在下面,我假设您的“ then”关键字在逻辑上是“ iff”。
state_1 == "set"
state_2 == "not available"
op_1 = operand.__or__
table = []
for in1, in2 in itertools.product([A, B]):
val1 = in1 == state_1
val2 = in2 == state_2
table.append([val1, val2, op_1(va1, val2)])
有了更多的输入和更多的逻辑运算,您将需要转向解析机制,并为这些二进制运算构建一棵树。
这能让你动起来吗?