在Python中从pdftotext模块中删除页眉和页脚

在Python中从pdftotext模块中删除页眉和页脚,python,ocr,text-extraction,pdftotext,Python,Ocr,Text Extraction,Pdftotext,我正在使用python包从pdf中提取文本,但是我需要从文本文件中删除页眉和页脚,以便仅提取内容 有两种方法可以解决此问题: 在文本文件中使用正则表达式 从pdf获取文本时使用一些过滤器 现在,当前的问题是页眉和页脚与页面不一致。 例如,页眉的前1-2行可能有一致的承包商地址,但页眉的第3行有章节和页面所遵循的主题。类似地,页脚由项目编号(也不是固定的数字值)、小节编号和一些设计字组成,后跟一个应该一致的日期(但每个项目都不同)。还应注意的是,每个项目的pdf文件可以超过500页,但可能会根据章

我正在使用python包从pdf中提取文本,但是我需要从文本文件中删除页眉和页脚,以便仅提取内容

有两种方法可以解决此问题:

  • 在文本文件中使用正则表达式
  • 从pdf获取文本时使用一些过滤器
  • 现在,当前的问题是页眉和页脚与页面不一致。

    例如,页眉的前1-2行可能有一致的承包商地址,但页眉的第3行有章节和页面所遵循的主题。类似地,页脚由项目编号(也不是固定的数字值)、小节编号和一些设计字组成,后跟一个应该一致的日期(但每个项目都不同)。还应注意的是,每个项目的pdf文件可以超过500页,但可能会根据章节进行拆分

    目前我正在使用此代码提取信息。是否有任何我不知道的参数可用于删除页眉和页脚

    import pdftotext
    
    def get_data(pdf_path):
    
        with open(pdf_path, "rb") as f:
            pdf = pdftotext.PDF(f)
    
        print("Pages : ",len(pdf))
    
        with open('text-pdftotext.txt', 'w') as k:
            k.write("\n\n".join(pdf))
    
        f.close()
        k.close()
    
    get_data('specification_file.pdf')
    

    问题的一个答案是使用
    pdf2image
    模块将PDF视为图像,并使用
    pytesseract
    提取其中的文本。这样,您就可以使用
    opencv
    裁剪页眉和页脚,只保留文件的核心。然而,这可能不是一个完美的方法,因为pdf2image方法
    从路径转换\u
    可能需要相当长的时间才能运行

    如果你感兴趣的话,我在这里放一些代码

    首先,确保安装了所有必要的从属设备以及Tesseract和ImageMagik。您可以在网站上找到有关安装的任何信息。如果你正在使用windows,有一篇很好的中级文章

    使用pdf2image将PDF转换为图像:

    如果您在windows上工作,请不要忘记添加poppler路径。它应该看起来像
    r'C:\\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)
    
    裁剪图像页脚和页眉:

    我不知道你的页脚和页眉的大小,但是通过多次尝试裁剪你的图像,你应该能够找到合适的尺寸来使用。 然后,您可以使用
    OpenCV
    裁剪方法
    new\u head
    作为页眉下方y轴上的顶部像素值,以及
    new\u bottom
    作为页脚开始的y轴上的底部像素,来裁剪图像以保留PDF的正文

    def crop_img(fic, output_folder):
        img = cv2.imread(fic)
        shape = img.shape
        crop_img = img[new_head:new_bottom, 0:shape[1]]
        cv2.imwrite(output_folder+name, crop_img)
    
    从图像中提取文本:

    您的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
    

    感谢您的努力,但正如我所说,这是一个500多页的pdf,将它们全部转换为图像不是一个好主意(更不用说pdftotext能够通过文本提取实现的准确性)。