如何使用 PDFPlumber 从两列 PDF 中提取文本

问题描述 投票:0回答:1

我正在使用 python 进行主题建模任务,我想从年度/可持续发展报告中提取文本。然而我的问题是,当我尝试提取报告时,提取的行在页面中的两个不同列之间断开,即它连接相邻段落中的两个不同行以构成一个句子。如何按照报告中的显示方式准确提取行。我已附上报告的版本以及函数提取的行。

以下是我使用的功能:

#从url获取pdf的函数:

def converter(url):
    text=[]
    req= requests.get(url)
    with pdfplumber.open(BytesIO(req.content)) as pdf:
        for i in range(0, len(pdf.pages)):
            pages= pdf.pages[i]
            text.append(pages.extract_text())
    return "\n".join(str(i) for i in text)

下图是我正在提取的报告中的一个片段,报告中的文本分为两列,extract_content 函数将这两列混合起来得到一行,即,将两列中的行连接起来并呈现为单个线。

page screenshot

这是报告的第一行(第一列和第二列的开头由函数合并在一起):

我 2019 年的首要职责之一是采访当我们 开启新战略时期 在“早安挪威”节目中 2016年谈的时候,我表达了希望AF能感受到 关于AF的 目标是将紧密结合的百分比增加一倍 希望超越 女性

如果我能按照报告中给出的确切方式提取句子,将会很有帮助。

python text-extraction topic-modeling information-extraction pdfplumber
1个回答
6
投票

这是基于 samkit-jain 对软件包问题的响应。

关键是

page.crop

假设没有标题信息,将页面裁剪成两半:

left = page.crop((0, 0, 0.5 * page.width, 0.9 * page.height))
right = page.crop((0.5 * page.width, 0, page.width, page.height)

然后提取文本并连接:

l_text = left.extract_text()
r_text = right.extract_text()
text = l_text + " " + r_text

当然,如果报告中的某个页面有一个跨越两列的数字,则这种方法会弄乱它,因此您可能必须在每页上进行自定义。

© www.soinside.com 2019 - 2024. All rights reserved.