Я хочу преобразовать бенгальский PDF-файл в текстовый файл. Текущий инструмент, который я использую, pdftotext от poppler-utils, не дает точных результатов, поскольку в PDF-файле используется шрифт Kalpurush. Существуют ли какие-либо инструменты, которые позволяют мне указать шрифт Kalpurush для получения точных результатов? Я хотел бы сделать это, используя Python, PHP, JS или сценарий Bash.
Вы можете попробовать использовать механизм OCR Tesseract. Он поддерживает бенгальский язык и позволяет указать шрифт, который будет использоваться для распознавания текста. Вам необходимо установить пакеты:
pip install pdf2image pytesseract
Затем конвертируйте PDF в изображения:
images = convert_from_path(pdf_path)
И, наконец, извлеките текст:
text = ""
for page in images:
# Use pytesseract to extract text from the image
# Specify the Kalpurush font and the Bengali language code
text += pytesseract.image_to_string(page, lang='ben', config=f'--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ் --tessdata-dir "{font_path}"')
Альтернативно вы можете использовать библиотеку pdfplumber, которая извлекает текст из PDF-файлов и поддерживает указание собственных шрифтов. Аналогично вам необходимо установить его:
pip install pdfplumber
Затем извлеките текст из PDF-файла:
with pdfplumber.open(pdf_path) as pdf:
# Load the custom font
pdf.load_font(font_path)
text = ""
for page in pdf.pages:
text += page.extract_text()
PyMuPDF позволяет писать и читать текст, написанный бенгальскими шрифтами, например. также kalpurush.ttf
:
import pymupdf
fontfile = "kalpurush.ttf"
doc = pymupdf.open() # make a new PDF
page = doc.new_page() # add a page
rect = pymupdf.Rect(100, 100, 400, 400) # write text inside this
text = """সমস্ত মানুষ স্বাধীনভাবে সমান মর্যাদা এবং অধিকার নিয়ে জন্মগ্রহণ
করে। তাঁদের বিবেক এবং বুদ্ধি আছে; সুতরাং সকলেরই একে অপরের প্রতি ভ্রাতৃত্বসুলভ
মনোভাব নিয়ে আচরণ করা উচিৎ।"""
# instructions to use the font file
css = """@font-face {font-family: bengali; src: url(kalpurush.ttf);}
* {font-family: bengali;}
"""
# search current folder for font file
arch = pymupdf.Archive(".")
# insert the text
page.insert_htmlbox(rect, text, css=css, archive=arch)
doc.ez_save("bengali.pdf")
Читаем текст еще раз:
import pymupdf
doc = pymupfg.open("bengali.pdf")
page = doc[0]
text = page.get_text()
Вы пробовали PyMuPDF ? Примечание. Я сопровождаю и создаю PyMuPDF.