Извлечение текста, написанного на хинди, из pdf в python

Я хочу извлечь текст, напечатанный на хинди, из pdf-документа. Я прикрепил изображение образца страницы Я имею дело с.

Я пытался использовать pdfminer, чтобы получить из него текст, но текст искажен (может быть, из-за хинди-шрифтов)

Теперь я думаю о том, чтобы разделить страницу на три части, а затем разделить каждую часть на две части (разделяя текст на английском и хинди), а затем запустить ocr на каждой половине, чтобы получить текст, но проблема только в том, что я не знаю шрифт, используемый для хинди, поэтому Я могу снова получить искаженный текст.

Мой вопрос: есть ли лучший способ справиться с хинди-шрифтами? Как узнать название шрифта?


person Gaurav Shukla    schedule 10.03.2016    source источник
comment
Не могли бы вы добавить ссылку на исходный PDF?   -  person Martin Evans    schedule 10.03.2016
comment
Исходный PDF   -  person Gaurav Shukla    schedule 10.03.2016
comment
@Gaurav: Были ли у вас какие-либо возможности получить решение для вышеуказанных вопросов?   -  person Niks Jain    schedule 22.11.2017
comment
@NiksJain Нет, не знал   -  person Gaurav Shukla    schedule 01.12.2017
comment
Извлечение шрифта можно выполнить с помощью pdfminer для python2 или pdfminer.six для python3, как показано здесь: извлечение имени шрифта   -  person aspiring1    schedule 04.09.2019


Ответы (1)


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

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)

    with open(path, 'rb') as fp:
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        password = ""
        caching = True
        pagenos = set()

        for page in PDFPage.get_pages(fp, pagenos, password=password,caching=caching, check_extractable=True):
            interpreter.process_page(page)

        text = retstr.getvalue()

    device.close()
    retstr.close()
    return text

print convert_pdf_to_txt("Electoral roll - Faizabad.pdf")

Он отображается как utf-8, поэтому вы должны убедиться, что ваша консоль вывода способна отображать его.

Например:

भभग ससखखभककल मतदभतभ 11 1.रजजरभ आसशशकपपथममक ववददपलद रजजरप - सपमपनद779 420 359 0 779ननरभरचक नभमभरलल 2014 0S24उततर पददशवरधभन सभभ कदत कक ससखखभ ,नभम र आरकण सससनत:ललक सभभ कदत कक ससखखभ ,नभम र आरकण सससनत: 1 . पकनरलकण कभ वरररणपकनरलकण कभ ररर : 2014अहतभर कक नतथस: 01.01.2014पकनरलकण कभ सररप: ससककपत पकनरलकणपकभशन कक नतथस: 01.10.2013पकनरमकदण कक नतथस : 15.03.2014

Чтобы определить список используемых шрифтов, вы можете просто загрузить PDF-файл в программу чтения PDF-файлов, например Adobe Reader или Foxit Reader, и выбрать Properties в меню «Файл». Отсюда вы сможете выбрать Fonts. Когда я попробовал это с Foxit Reader, он отобразил следующие шрифты:

Mangal-Bold
Arial
Mangal
Arial Bold
Times-New-Roman-Bold
person Martin Evans    schedule 10.03.2016
comment
Я также пробовал это. Но извлеченный текст неверен даже на 60-70%. - person Gaurav Shukla; 10.03.2016
comment
Я также столкнулся с той же проблемой. Любое другое соответствующее решение по этому поводу? - person Niks Jain; 22.11.2017