我正在使用R中最新的Tesseract OCR引擎从几张图像中提取文本。它运行良好,我对结果感到满意。问题是我不希望整个文本只是一部分,但我不知道如何提取它。
代码是这样:
library("tesseract")
library("pdftools")
library("magick")
mypdfFile<-"C:/Users/.../fileName.pdf"
mypngFile<-pdf_convert(mypdfFile, format="png", pages=1, dpi=600)
myImage<-image_read("fileName_1.png")
textFile<-ocr(myImage,engine = tesseract("spa"), HOCR = FALSE) # Text is in spanish
cat(textFile)
现在,最终结果看起来像这样
bla bla bla bla bla bla
bla text that I want to
extract bla bla bla bla
bla bla bla bla bla bla
如何获取要提取的文本?
我尝试在应用ocr()函数之前裁切图像,但是仅裁切该部分是不可行或非常准确的。 ocr()返回纯文本。
下面的完整示例
图像(最初是pdf文件)是电费单。由于隐私问题,我无法提供完整的信息,但是看起来像sample image。在 NOMBRE Y DIRECCION (名称和地址)下,应该有两行(一个带有名称,另一个带有地址),其后是“ GALEANA CENTRO LERDO。CP”(城市名称)和“ 35150 LERDO,DGO”。 (邮政编码和州)。我的代码如下:
myImage<-image_read("sampleImage.png")
myImage<-image_crop(myImage, new dimensions) #crop the right half and some from the top
textFile<-ocr(myImage,engine = tesseract("spa"), HOCR = FALSE)
cat(textFile)
我知道
Nombre y Domicilio
NAME REDACTED
ADDRESS REDACTED
GALEANA CENTRO LERDO. C.P.
35150 LERDO, DGO.
Cuenta E Tarifa
30DC27B011164660 General < 25kW 02
AE A MA E
Num. de Lectura Lectura Mult. C
Medidor actual anterior
BD6687 40994 40539 1 ¿
Apoyo gubernamental
我只想从中提取“ NAME REDACTED”和“ 35150 LERDO,DGO”之间的所有内容。包括的。
答案 0 :(得分:1)
如果您知道文本的位置,则可以先裁剪图像,也可以使用whitelist
来限制tesseract寻找的内容,请参见here.
编辑: 经过评论,我们确实可以检索地址,这里使用逻辑“提到“地址”的行之后的两行
text <- ("Nombre y Domicilio
NAME REDACTED
ADDRESS REDACTED
GALEANA CENTRO LERDO. C.P.
35150 LERDO, DGO.
Cuenta E Tarifa
30DC27B011164660 General < 25kW 02
AE A MA E
Num. de Lectura Lectura Mult. C
Medidor actual anterior
BD6687 40994 40539 1 ¿
Apoyo gubernamental")
library(dplyr)
text2 <- strsplit(text, "\n") %>% unlist()
addressline <- which(grepl("address", text2, ignore.case = T))
addresslines <- c(addressline+1:2)
address_extracted <- text2[addresslines]
address_extracted
[1] "GALEANA CENTRO LERDO. C.P." "35150 LERDO, DGO."