Я использую алгоритм OCR (основанный на tesseract), который имеет трудности с распознаванием определенных символов. Я частично решил, что, создав свою собственную «хэш-таблицу после обработки», которая включает в себя пары символов. Например, поскольку текст - это просто цифры, я понял, что если в тексте есть символ Q
, он должен быть 9
.Создание строк со всеми возможными комбинациями
Однако у меня есть более серьезная проблема с 6
и 8
персонажами, так как оба они распознаются как B
. Теперь, когда я знаю, что я ищу (когда я переводил изображение в текст), а строки довольно короткие (6 ~ 8 цифр), я думал создать строки со всеми возможными комбинациями 6
и 8
и сравнить каждый из них их к той, которую я ищу.
Так, например, у меня есть следующие строки, признанную OCR:
L0B7B0B5
Таким образом, каждый B
здесь может быть 6
или 8
.
Теперь я хочу, чтобы создать список, как ниже:
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.
Буду рад услышать любые другие идеи о том, как выполнить эту задачу. Может быть, есть более простое решение, о котором я не думал?
Я не использую Jython, но предположительно '' itertools' должен работать. В чем проблема? что? – Veedrac
Это похоже на то, что именно 'itertools.product' для. Вместо того, чтобы выяснить, как это сделать вручную, как насчет попытки заставить «itertools» работать в вашей среде? –
Если по какой-либо причине вы не можете напрямую использовать 'itertools.product', вы можете легко скопировать и вставить [справочную реализацию] (http://docs.python.org/2.7/library/itertools.html#itertools.product) в чистом Python. Он будет использовать больше памяти, но часто это не является узким местом. – DSM