我目前正在做一个项目,以提取PDF的内容。代码运行平稳,我可以提取文本,但提取的文本没有正确的顺序。代码以一种奇怪的方式提取文本。课文的顺序到处都是。它不会自上而下,而且真的令人困惑。
我在网上查了一下,但在如何排序文本提取方面几乎没有什么帮助。大多数教程得出了同样的结果。作为参考,这是我目前正在测试的PDF文件(第5页):https://www.pidm.gov.my/PIDM/files/13/134b5c79-5319-4199-ac68-99f62aca6047.pdf
import PyPDF2
with open('pdftest2.pdf', 'rb') as pdfTest:
reader = PyPDF2.PdfFileReader(pdfTest)
page5 = reader.getPage(4)
text = page5.extractText()
print(text)
提取的文本总是从页面的页脚开始,然后从底部到顶部。我注意到,在下一页,它将从上到下开始,但只有少数几个特定的句子。然后,它将从页面的另一个位置提取文本,而不是从它停止的位置继续。
所有的文本都是被提取出来的,但是它被抽取的顺序到处都是。这个问题有什么解决办法吗?
发布于 2021-05-16 13:44:06
我不得不处理一个类似的问题,结果发现模块pdfplumber
比PyPDF
工作得更好。我想这取决于文件本身,你应该试试。
否则,解决问题的另一个方法是将PDF与pdf2image
模块视为图像,并使用pytesseract
提取其中的文本。但是,它可能不是完美的方法,因为pdf2image方法convert_from_path
可能需要相当长的时间才能运行。
如果你有兴趣的话,我会在这里删除一些代码。
首先,确保您安装了所有必要的约束,以及Tesseract和ImageMagik。您可以在网站上找到有关安装的任何信息。如果您正在使用windows,那么有一篇很好的中型文章这里。
使用pdf2image:将PDF转换为图像
如果您正在windows上工作,请不要忘记添加弹出程序路径。看起来应该像那个r'C:\<your_path>\poppler-21.02.0\Library\bin'
def pdftoimg(fic,output_folder, poppler_path):
# Store all the pages of the PDF in a variable
pages = convert_from_path(fic, dpi=500,output_folder=output_folder,thread_count=9, poppler_path=poppler_path)
image_counter = 0
# Iterate through all the pages stored above
for page in pages:
filename = "page_"+str(image_counter)+".jpg"
page.save(output_folder+filename, 'JPEG')
image_counter = image_counter + 1
for i in os.listdir(output_folder):
if i.endswith('.ppm'):
os.remove(output_folder+i)
从图像中提取文本:
您的tesseract路径将是这样的:r'C:\Program Files\Tesseract-OCR\tesseract.exe'
def imgtotext(img, tesseract_path):
# Recognize the text as string in image using pytesserct
pytesseract.pytesseract.tesseract_cmd = tesseract_path
text = str(((pytesseract.image_to_string(Image.open(img)))))
text = text.replace('-\n', '')
return text
发布于 2022-07-29 20:07:51
我最近开始使用PyMuPDF。它的许可有点令人困惑,但他们的一些方法有方法正确排序文本,因为它自然出现(左到右,从上到下)。就像page.get_text(“单词”,sort=True)一样。
https://stackoverflow.com/questions/67557264
复制相似问题