gpt4 book ai didi

python - 使用所有可能的组合创建字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:36 24 4
gpt4 key购买 nike

我正在使用 OCR 算法(基于 tesseract),该算法难以识别某些字符。我已经通过创建我自己的包含字符对的“后处理哈希表”部分解决了这个问题。例如,由于文本只是数字,我发现如果文本中有 Q 字符,则它应该是 9

但是我对 68 字符有一个更严重的问题,因为它们都被识别为 B。现在因为我知道我在寻找什么(当我将图像翻译成文本时)并且字符串相当短(6~8 位数字),我想创建包含 6 所有可能组合的字符串和 8 并将它们中的每一个与我正在寻找的那个进行比较。

例如,我有以下 OCR 识别的字符串:

L0B7B0B5

所以这里的每个B可以是68

现在我想生成如下列表:

L0878085
L0878065
L0876085
L0876065
.
.

所以它是一种具有 3 位数字的二进制表,在这种情况下有 8 个选项。但是字符串中B字符的数量可以不是3(可以是任意数字)。

我曾尝试将 Python itertools 模块与类似的东西一起使用:

list(itertools.product(*["86"] * 3))

这将提供以下结果:

[('8', '8', '8'), ('8', '8', '6'), ('8', '6', '8'), ('8', '6', '6'), ('6', '8', '8'), ('6', '8', '6'), ('6', '6', '8'), ('6', '6', '6')]

我想我以后可以用它来交换 B 字符。但是,出于某种原因,我无法让 itertools 在我的环境中工作。我认为这与我使用的是 Jython 而不是纯 Python 这一事实有关。

我很乐意听到有关如何完成此任务的任何其他想法。也许有一个我没有想到的更简单的解决方案?

最佳答案

itertools.product 接受您可以使用的 repeat 关键字:

In [92]: from itertools import product

In [93]: word = "L0B7B0B5"

In [94]: subs = product("68", repeat=word.count("B"))

In [95]: list(subs)
Out[95]:
[('6', '6', '6'),
('6', '6', '8'),
('6', '8', '6'),
('6', '8', '8'),
('8', '6', '6'),
('8', '6', '8'),
('8', '8', '6'),
('8', '8', '8')]

然后,一种相当简洁的替换方法是使用字符串 replace 方法进行缩减操作:

In [97]: subs = product("68", repeat=word.count("B"))

In [98]: [reduce(lambda s, c: s.replace('B', c, 1), sub, word) for sub in subs]
Out[98]:
['L0676065',
'L0676085',
'L0678065',
'L0678085',
'L0876065',
'L0876085',
'L0878065',
'L0878085']

另一种方法,使用 itertools 中的更多函数:

In [90]: from itertools import chain, izip_longest

In [91]: subs = product("68", repeat=word.count("B"))

In [92]: [''.join(chain(*izip_longest(word.split('B'), sub, fillvalue=''))) for sub in subs]
Out[92]:
['L0676065',
'L0676085',
'L0678065',
'L0678085',
'L0876065',
'L0876085',
'L0878065',
'L0878085']

关于python - 使用所有可能的组合创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com