13

我想使用python从pdf中提取特定标题下的文本。

例如,我有一个带有标题简介、摘要、内容的 pdf。我只需要提取标题“摘要”下的文本。

我怎样才能做到这一点?

样本图像

4

3 回答 3

8

这个场景正是我在我现在的公司正在做的事情。我们需要提取标题下的文本。我个人使用的是基于规则的系统,即在逐行阅读整个文档后使用正则表达式来识别所有编号的标题。获得标题后,我输入要为其查找相应段落的标题的名称。此输入与预先存在的标题列表匹配,并使用通用句子编码器找到最接近的匹配项。之后,我只显示从该标题到下一个标题的所有内容。

于 2019-07-10T09:14:49.740 回答
3

Pdf 是非结构化文本,因此没有标签可以直接提取数据。因此,我们使用正则表达式从文本语料库中找到所需的信息。使用以下代码提取原始页面文本。

import fitz
page = pdf_file.loadPage(0) # 0 represents the page number... upto n-1 pages...
dl = page.getDisplayList()
tp = dl.getTextPage()
tp_text=tp.extractText()
re.split('\n\d+.+[ \t][a-zA-Z].+\n',tp_text)

然后根据您的需要应用正则表达式...(这对我有用,但您可能需要也可能不需要更改它)

我正在给出一个详细的例子,这将如何工作

re.findall('\n\d+.+[ \t][a-zA-Z].+\n',"some text\n1. heading 1\nparagraph 1\n1.2.3 Heading 2\nparapgraph 2")

输出:['\n1. 标题 1\n', '\n1.2.3 标题 2\n']

您可以使用re.split每个标题拆分文本并检索所需的标题文本。

re.split('\n\d+.+[ \t][a-zA-Z].+\n',"some text\n1. heading 1\nparagraph 1\n1.2.3 Heading 2\nparapgraph 2")

输出:['some text', 'paragraph 1', 'parapgraph 2']

简单地,第 i 个标题将具有 (i+1) 个标题文本。

于 2020-02-10T22:07:06.040 回答
3

我发现使用正则表达式的最佳方法

regex = r"^\d+(?:\.\d+)* .*(?:\r?\n(?!\d+(?:\.\d+)* ).*)*"
print(re.findall(regex,samplestring, re.M))

于 2020-07-22T06:14:14.137 回答