为什么我的代码只从 PDF 的最后一页创建 jpeg,因此只将最后一页写入文本文件?

Why is my code only creating a jpeg from the last page of the PDF and therefore only writing the last page to a text file?

我需要从 PDF 中为某些关键字抓取大量文本,然后在找到的页面上列出这些关键字。诚然,我是 Python 的新手,我只是按照从 PDF 抓取到 JPEG 并将其写入文本的教程开始。但是,我 运行 即使这样也遇到了一些问题。我的问题是,尽管我似乎确实能够将此 PDF 的 some 转换为 txt,但它只占用一页,即最后一页。我的问题是为什么?我该如何解决这个问题?

谢谢

from PIL import Image 
import pytesseract 
import sys 
from pdf2image import convert_from_path 
import os 

PDF_file = "file2.pdf"
  
  
pages = convert_from_path(PDF_file, 500) 
  
image_counter = 1
  
for page in pages: 
  
   
    filename = "page_"+str(image_counter)+".jpg"
      
    page.save(filename, 'JPEG') 
  
    image_counter = image_counter + 1
  

filelimit = image_counter-1
  
outfile = "out_text.txt"
  

f = open(outfile, "a") 
  
for i in range(1, filelimit + 1): 
  
    
          
    text = str(((pytesseract.image_to_string(Image.open(filename))))) 
  
   
    text = text.replace('-\n', '')     
  
    f.write(text) 
  
f.close()

问题出在 filename 声明中。

第一个循环结束时:

for page in pages: 
    filename = "page_"+str(image_counter)+".jpg"
    page.save(filename, 'JPEG') 
    image_counter = image_counter + 1

您的 filename 变量设置为最终的 image_counter。当您使用 filename 变量读取时,您读取了最后一张图像 1filelimit + 1 时间。

一个解决方案是在第二个循环中重新声明 filename

for i in range(1, filelimit + 1): 
    filename = "page_"+str(i)+".jpg"
    text = str(((pytesseract.image_to_string(Image.open(filename))))) 
    text = text.replace('-\n', '')     
    f.write(text) 
  
f.close()

这应该可以解决单独读取每个文件名的问题。