首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从OCR图像文件中提取文本

从OCR图像文件中提取文本
EN

Stack Overflow用户
提问于 2019-05-01 09:34:29
回答 3查看 2K关注 0票数 2

我试图从OCR图像中提取几个字段。我正在使用pytesseract来读取OCR图像文件,这是正常工作的。

代码:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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。但问题是我并没有在整条线上循环。它每次只取一个字符,这就是为什么我的正则表达式不起作用的原因。

代码:

代码语言:javascript
复制
for line in text :
    print(line)
    x= re.findall(r'^A[0-9][0-9][0-9][0-9]', text)
    print(x)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-01 09:41:39

也去掉那个循环,只使用

代码语言:javascript
复制
x= re.findall(r'A[0-9][0-9][0-9][0-9]', text)

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

票数 2
EN

Stack Overflow用户

发布于 2019-05-01 09:42:32

text是一个字符串,当使用for-loop循环一个字符串时,它的默认行为是循环这些字符(因为字符串基本上是一个字符列表)。

要循环遍历这些行,首先使用text.splitlines()将文本拆分为行

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-05-01 09:41:13

regex中的问题是启动锚点^,它期望匹配的文本A0425应该从行的一开始就开始,而实际上并非如此,因为前面有Y和空间。因此,只要从正则表达式中删除^,就可以得到所有预期的字符串。另外,您可以将其中的四个[0-9]更改为[0-9]{4},缩短的正则表达式变为,

代码语言:javascript
复制
A[0-9]{4}

Regex Demo

你需要像这样修改你现在的代码,

代码语言:javascript
复制
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))

这应该打印出所有的匹配,而不需要单独循环成行,

代码语言:javascript
复制
['A0427', 'A0425', 'A0398']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55934248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档