从OCR图片文件中提取文本

时间:2019-05-01 09:34:29

标签: regex python-3.x python-tesseract

我正在尝试从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 个答案:

答案 0 :(得分:2)

也摆脱for循环,仅使用

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

没有任何循环。 (“也删除^”)

答案 1 :(得分:1)

正则表达式中的问题是起始锚点^,它希望匹配的文本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']

答案 2 :(得分:1)

text是一个字符串,使用for循环遍历一个字符串时,Python的默认行为是遍历字符(因为字符串基本上是一个字符列表)。

要遍历各行,请首先使用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答案一起跳过循环:)