如何使用Pypdf2从Pdf中提取文本,但从图表和表格中排除文本内容

时间:2019-11-26 09:03:28

标签: python text pypdf2

我想从python的PPT和PDF文件中提取文本内容。

虽然使用PPTX可以很好地提取文本,但是当我不需要使用extract_text()时,使用PyPDF2可以从图表和表格以及PDF提取文本内容。

我尝试了不同的方法,但无法找到实现此目的的方法。有什么办法可以做到这一点? Pfb的代码相同。

import ntpath 
import os 
import glob 
import PyPDF2 
import pandas as pd from pptx import Presentation

        df_header=pd.DataFrame(columns=['Document_Name', 'Document_Type', 'Page_No', 'Text', 'Report Name'])
df_header.to_csv('Downloads\\\\FinalSample.csv', mode='a', header=True) 
for eachfile in glob.glob("D:\\CP US People-Centric Hub (19-SCP-3063)\\Reports\\/*\\\\/*"):
    file1 = eachfile.split("\\")
    report_name = file1[3]
    if eachfile.endswith(".pptx"):
        data=[]
        prs = Presentation(eachfile)
        for slide in prs.slides:
            text_runs = ''
            slide_num = prs.slides.index(slide) + 1
            for shape in slide.shapes:
                if not shape.has_text_frame:
                    continue
                for paragraph in shape.text_frame.paragraphs:
                    text_runs = text_runs + ' ' + paragraph.text
            data.append([ntpath.basename(eachfile), 'PPT', slide_num, text_runs,report_name])      
        df_ppt=pd.DataFrame(data)
        df_ppt.to_csv('Downloads\\\\FinalSample.csv', mode='a', header=False)  
    elif eachfile.endswith(".pdf"):
        data1=[]
        pdfFileObj = open(eachfile, 'rb')
        pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
        outlines = pdfReader.getOutlines()
        for pageNum in range(pdfReader.numPages):
            data1.append([ntpath.basename(eachfile), 'PDF', pageNum + 1,pdfReader.getPage(pageNum).extractText(),report_name])
        df_pdf=pd.DataFrame(data1)
        df_pdf.to_csv('Downloads\\\\FinalSample.csv', mode='a', header=False)
        pdfFileObj.close()

1 个答案:

答案 0 :(得分:0)

不,对不起:从PDF中提取 just 正文文本并省略图形标题,脚注,页眉,页脚,页码等通常是不可能的。这是因为“正文”并不是PDF格式中定义的概念。

不过,您可以深入资料库并添加一些针对人物字幕的启发式方法,例如丢弃大间隙后没有文本的文本块,或者太短的文本块(但是标题呢?),或者字体大小比平均值小得多的文本块。