【问题标题】: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']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        相关资源
        最近更新 更多