【问题标题】:Permutations and combination in pythonpython中的排列组合
【发布时间】:2021-10-11 12:54:51
【问题描述】:
我正在研究一个 OCR 用例,并从混淆矩阵中识别出常见的错误分类,例如:“1”与“J”混淆,“2”与“Z”和“J”混淆。
对于给定的单词,我正在尝试创建一个 python 脚本,该脚本将创建导致所有错误分类的所有排列。
例子:
- 常见错误分类:{'1':['J'],'2':['Z','J']}
- 输入:“AB1CD2”
- 输出:AB1CD2、AB1CDZ、ABJCD2、ABJCDZ、AB1CDJ、ABJCDJ
我该如何解决这个问题?
【问题讨论】:
标签:
python
ocr
permutation
【解决方案1】:
您可以使用包含所有可能分类的字典,而不仅仅是所有 mis 分类,从而获得一个简洁的解决方案。也就是说,你首先用所有可能的正确分类“丰富”你的错误分类字典。
from itertools import product
all_characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
common_misclass = {'1':['J'],'2':['Z','J']}
input_string = "AB1CD2"
common_class = {}
for char in all_characters:
if char in common_misclass:
common_class[char] = [char] + common_misclass[char]
else:
common_class[char] = [char]
possible_outputs = ["".join(tup) for tup in
product(*[common_class[letter] for letter in input_string])]
print(possible_outputs)
【解决方案2】:
itertoolsproduct 应该有帮助
from itertools import product
misclass = {'1':['J'],'2':['Z','J']}
misclass_items = [tuple([k, *v]) for k, v in misclass.items()]
print(["AB" + x + "CD" + y for (x, y) in list(product(*misclass_items))])
# ['AB1CD2', 'AB1CDZ', 'AB1CDJ', 'ABJCD2', 'ABJCDZ', 'ABJCDJ']