Извлечение текста из файла изображения OCR - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь извлечь несколько полей из изображения OCR. Я использую Pytesseract для чтения файла изображения OCR, и это работает, как ожидалось.

Код:

import pytesseract
from PIL import Image
import re

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract- 
OCR\tesseract.exe"

value = Image.open("ocr.JPG")
text = pytesseract.image_to_string(value)
print(text)

Выход:

ALS 1 Emergency Base Rate
Y A0427 RE ABC
Anbulance Mileage Charge

Y A0425 RE ABC
Disposable Supplies
Y A0398 RH ABC

184800230, x

Далее я должен извлечь A0427 и A0425 из текста ... но проблема в том, что я не перебираю всю строку ... он принимает один символ за раз, и поэтому мое регулярное выражение не работает ..

Код:

for line in text :
    print(line)
    x= re.findall(r'^A[0-9][0-9][0-9][0-9]', text)
    print(x)

Ответы [ 3 ]

2 голосов
/ 01 мая 2019

Избавьтесь от этого для цикла, используйте только

x= re.findall(r'A[0-9][0-9][0-9][0-9]', text)

без петли. («удалить ^ тоже»)

1 голос
/ 01 мая 2019

text - это строка, поведение по умолчанию для Python при циклическом цикле по строке с использованием for -loop - это циклическое перемещение по символам (поскольку строка в основном представляет собой список символов).

Чтобы перебрать строки, сначала разбейте текст на строки, используя text.splitlines():

for line in text.splitlines() :
    print(line)
    x= re.findall(r'^A[0-9][0-9][0-9][0-9]', text)
    print(x)

РЕДАКТИРОВАТЬ: Или используйте ответ Patels, чтобы пропустить цикл все вместе:)

1 голос
/ 01 мая 2019

Проблема в вашем регулярном выражении - это начальный якорь ^, который ожидает, что ваш соответствующий текст A0425 должен начинаться с самого начала строки, и это действительно не тот случай, когда у вас есть Y и пробел перед ним. Так что просто удалите ^ из вашего регулярного выражения, и тогда вы получите все ожидаемые строки. Кроме того, вы можете изменить четыре из этого [0-9], чтобы записать как [0-9]{4}, и ваше сокращенное регулярное выражение становится,

A[0-9]{4}

Regex Demo

Вам нужно изменить свой текущий код следующим образом,

import pytesseract
from PIL import Image
import re

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract- 
OCR\tesseract.exe"

value = Image.open("ocr.JPG")
text = pytesseract.image_to_string(value)

print(re.findall(r'A[0-9]{4}', text))

Это должно печатать все ваши совпадения без необходимости повторения по отдельности в строки,

['A0427', 'A0425', 'A0398']
...