使用Python解析PDF教科书中的索引页面

Ary*_*yan 8 python pdftotext pdfminer ner natural-language-processing

我必须将PDF页面中的文本从缩进中提取到CSV文件中.

PDF教科书的索引页面:

我应该将文本拆分为类和子类型层次结构以及页码.例如,在图像中, Application server是类,Apache Tomcat是页码275中的子类

这是CSV的预期输出:

我使用Tika解析器来解析PDF,但是在解析的内容中没有正确维护缩进(不是唯一的),以便将文本拆分为类和子类.

这是解析文本的样子:

任何人都可以建议我这个要求的正确方法吗?

geo*_*xsh 4

尽管我不了解pdf提取,但可以从“解析的文本”重建层次结构,因为“子类”部分总是以额外的换行符开始和结束。

带有以下测试文本:

app architect . 50
app logic . 357
app server . 275

tomcat . 275
websphere . 275
jboss . 164

architect

acceptance . 303
development path . 304

architecting . 48
architectural activity . 25, 320
Run Code Online (Sandbox Code Playgroud)

以下代码:

import csv
import sys
import re


def gen():
    is_subclass = False
    p_class = None

    with open('test.data') as f:
        s = f.read()
    lines = re.findall(r'[^\n]+\n+', s)
    for line in lines:
        if ' . ' in line:
            class_name, page_no = map(lambda s: s.strip(), line.split('.'))
        else:
            class_name, page_no = line.strip(), ''

        if line.endswith('\n\n'):
            if not is_subclass:
                p_class = class_name
                is_subclass = True
                continue

        if is_subclass:
            yield (p_class, class_name, page_no)
        else:
            yield (class_name, '', page_no)

        if line.endswith('\n\n'):
            is_subclass = False


writer = csv.writer(sys.stdout)
writer.writerows(gen())
Run Code Online (Sandbox Code Playgroud)

产量:

app architect,,50
app logic,,357
app server,tomcat,275
app server,websphere,275
app server,jboss,164
architect,acceptance,303
architect,development path,304
architecting,,48
architectural activity,,"25, 320"
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。