2

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

以下是我使用的功能:

#function 从 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 函数将这两列混合起来得到一行,即将两列中的行连接起来并呈现为一行。

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

\n我在 2019 年的首要职责之一是接受采访。当我们开始新的战略期时,在 2016 年的“早安挪威”节目之外,我表示希望 AF 能感受到\nAF 的目标是增加一倍的百分比就像我们希望超越\nwomen时一样紧密

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

4

1 回答 1

1

这是基于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

当然,如果您的报告中的某个页面有一个跨越两列的图形,那么这种方法会搞砸,因此您可能必须在每个页面上自定义它。

于 2021-08-25T16:46:05.570 回答