我有两个列表'预测'和'参考'。每个列表都包含字符串,第一个是模型输出的预测元素,第二个是金标准。我想建立一个自动错误分类器,但无法找出比较每个列表中每个字符串中的每个字符。我可以逐字比较(代码包括在下面),但我想看字符的字符
下面是我的word-wise比较器的代码,以及我正在使用NB的数据列表,除了这个玩具示例之外,这些列表大约有3000个条目长
predicted = ['r * a k t\n', 'd * o u l\n', 'm * i s l\n', 'p * i . v @ p\n']
reference = ['r A k t\n', 'd * o u b\n, 'm * i s l\n, 'i * p . v @ t\n']
########### word-wise finder ##############
p = set(predicted)
r = set(reference)
errors = p - r
return(errors)
上面的代码返回我:
'r * a k t\n', 'd * o u l\n', 'p * i . v @ p\n'
我的梦想是有一个返回的列表,如下所示:
['* a', 'l', 'p * i', 'p']
因为我可以观察每一个元素,对它所犯的错误进行分类。 任何建议都将不胜感激
我最好的猜测是你在寻找每一对单词的字符差异
假设您正在寻找最小的差异,并且字符的顺序很重要,https://docs.python.org/3/library/difflib.html提供了实现正确算法的
SequenceMatcher
。它的输出有点混乱从字面上看,这意味着每种语言的
range(0, 2) == [0, 1]
中的字符是相同的。也就是说,'r '
匹配)然后第一个字符串中
range(2, 5) == [2, 3, 4]
的字符必须替换为第二个字符串中range(2,3) == [2]
的字符。所以'* a'
被'A'
替换然后第一个字符串中
range(5, 10) == [5, 6, 7, 8, 9]
的字符与第二个字符串中range(3, 8) == [3, 4, 5, 6, 7]
的字符匹配。换句话说' k t\n'
匹配对于您似乎要查找的格式(第一个列表中的内容不在第二个列表中),只查找操作码
replace
和delete
就足够了。另外两个操作码是equal
和insert
相关问题 更多 >
编程相关推荐