Выделите часть текста, которая была извлечена с помощью распознавания текста Tesseract - PullRequest
0 голосов
/ 07 ноября 2018

Я использую последний механизм распознавания текста Tesseract в R для извлечения текста из пары изображений. Это работает довольно хорошо, и я доволен результатами. Проблема в том, что мне не нужен весь текст, только какая-то его часть, но я не знаю, как его извлечь.

Код такой:

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) представляет собой счет за электроэнергию. Я не могу предоставить его полностью из-за проблем с конфиденциальностью, но выглядит это пример изображения . В разделе 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

Я просто хочу извлечь из этого все, что находится между "ИМЯ УДАЛЕНО" и "35150 ЛЕРДО, ДГО". включительно.

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете сначала обрезать изображение, если знаете, где находится ваш текст, или ограничить то, что ищет тессеракт, например, с помощью whitelist, см. здесь.


EDIT: После комментариев мы действительно можем получить адрес, используя логику «две строки после строки, где упоминается« Адрес »

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."  
...