Время прочтения: 2 мин.

В прошлой статье писал про то, как скачивали файлы из базы, тут речь пойдет о том, как распознать сканы pdf, среди этих документов. Дело в том, что нужно вытащить информацию из таблиц и анализировать их в дальнейшем, поэтому надо сканы перевести в формат, который можно обработать с помощью python. На сайте pypi.org есть библиотека pytesseract от Google. Так как требуется установка движка от Google на компьютер и плюс в нашем случае это будет работа с документами которые могут содержать конфиденциальную информацию то все действия будут проводиться на внутреннем компьютере не имеющем выхода в сеть. И так скачав необходимый файл и прописав к нему путь в коде мы можем приступить к обработке файлов с помощью python:

try:
    from PIL import Image
except ImportError:
    import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'<full_path_to_tesseract_executable>'
print(pytesseract.image_to_string(Image.open('test.png')))

Для начала все pdf файлы мы переводим в другой формат (например, .png) с помощью библиотеки fitz:

import fitz
from PIL import Image 
pdffile = 'C:/full_path /MsWord/526.pdf'
doc = fitz.open(pdffile)
page = doc.loadPage(0) #number of page
pix = page.getPixmap()
output = 'C:/.. /outfile.png'
pix.writePNG(output)

Далее все .png с помощью библиотеки pytesseract мы распознаем в текст (указывая конечно же какой язык мы используем)

import pytesseract
pytesseract.pytesseract.tesseract_cmd = "C:/Anaconda3/Tesseract-OCR/tesseract.exe"
img = Image.open(output)
text = pytesseract.image_to_string(img, lang = 'rus')
print(text)

К сожалению бесплатная библиотека от Google очень плохо распознает потому как на выводе получился текст, который сильно отличался по смыслу от оригинала! Для типовых документов эту проблему можно решить путем написания нейронной сети  и обучения ее на выборке этих документах, после чего подцеплять к pytesseract. Таким образом, мы можем просто дообучить pytesseract для своих задач, что бы он распознавал файлы без ошибок, но проблема в том, что это не универсальное решение и под каждый тип документов приходилось бы дообучать pytesseract, что не делает этот метод универсальным. Так как в наборе программных инструментов была лицензия ABBYY FineReader, то было принято решение все скачанные файлы прогонять через ABBYY и сохранять в нужном формате.