问题描述
我使用以下代码将PDF转换为文本文件。但是,我只对文档的正文感兴趣,没有数字,没有页码,没有表格,没有标题,没有公式等。
但是它给了我很多文本,其中一些是从表或公式中提取的短行。我希望结果文本对于用户来说是可读的,而无需填充无法在文本模式下显示的内容。
另一个问题是它将句子分成多行,因此我将放松句子边界。我想完整的句子不间断。
我使用了诸如“ all_text = False”之类的选项,但没有成功。
import sys
from tqdm import tqdm
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.converter import XMLConverter,HTMLConverter,TextConverter
from pdfminer.layout import LAParams
import io
def pdfparser(pdf_file):
fp = open(pdf_file,'rb')
rsrcmgr = PDFResourceManager()
retstr = io.StringIO()
codec = 'utf-8'
laparams = LAParams()
laparams.all_texts = False
laparams.detect_vertical = False
device = TextConverter(rsrcmgr,retstr,codec=codec,laparams=laparams)
# Create a PDF interpreter object.
interpreter = PDFPageInterpreter(rsrcmgr,device)
# Process each page contained in the document.
password = ""
maxpages = 3
caching = True
pagenos=set()
imagewriter = None
for page in tqdm(PDFPage.get_pages(fp)):
interpreter.process_page(page)
text = retstr.getvalue()
text = text.replace("\\n","\n")
return text
if __name__ == '__main__':
text = pdfparser(sys.argv[1])
print(text)
解决方法
通常,这在PDF中不直接可行。
与例如docbook,markdown和retextedtext,PDF文件不包含有关文档内容的语义信息。
即,内容未标记为e.q. “图像”,“公式”,“页面标题”,“页面页脚”,“章节标题”,“正文”等。
因此,您将不得不尝试从文本线索中重建这种语义信息。不幸的是,是否可行取决于文档。
例如,如果文档的结构使页眉和页脚与主体文本清楚地分开,则可以从字符串的起始位置推断出它是否是页眉,页脚或主体的一部分。
例如字体系列和大小可能使您能够区分主要文本和部分或章节标题以及图像或表格标题。但这是假设这些特征被一致地应用。