我正在使用 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 函数将这两列混合起来得到一行,即,将两列中的行连接起来并呈现为单个线。
这是报告的第一行(第一列和第二列的开头由函数合并在一起):
我 2019 年的首要职责之一是采访当我们 开启新战略时期 在“早安挪威”节目中 2016年谈的时候,我表达了希望AF能感受到 关于AF的 目标是将紧密结合的百分比增加一倍 希望超越 女性
如果我能按照报告中给出的确切方式提取句子,将会很有帮助。
这是基于 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
当然,如果报告中的某个页面有一个跨越两列的数字,则这种方法会弄乱它,因此您可能必须在每页上进行自定义。