在Python中从pdftotext模块中删除页眉和页脚
我正在使用python包从pdf中提取文本,但是我需要从文本文件中删除页眉和页脚,以便仅提取内容 有两种方法可以解决此问题:在Python中从pdftotext模块中删除页眉和页脚,python,ocr,text-extraction,pdftotext,Python,Ocr,Text Extraction,Pdftotext,我正在使用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能够通过文本提取实现的准确性)。