使用Python解析pdf并提取Author和Book名称

时间:2016-10-03 20:59:15

标签: python pdf split

我有一个PDF格式的邮寄参考列表。邮件列表具有非常通用的格式,即作者姓名,后跟书名。 请考虑以下示例:

美国阅读清单

民主理论

•达尔,民主理论序言

•熊彼特,资本主义,社会主义和民主(仅限介绍和第四部分)

•自由民主的制度,生活和时代

•达尔,民主及其批评者

现在我正在尝试使用pdf miner解析pdf并创建一个列表,其中第一个索引是作者名称,第二个索引是本书的名称,如下所示:

[Dahl,民主理论序言]

我正在尝试使用拆分功能,因为有一个逗号和一个后跟作者名称的空格。但是我得不到正确的结果。 有人可以帮忙吗?

def extract():
    string = convert_pdf_to_txt("/Users/../../names.pdf")
    lines = list(filter(bool, string.split('\n')))
    for i in lines:
        check.extend(i.split(','))
    x=remove_numbers(check)
    remove_blank= [x for x in x if x]
    combine_two = [remove_blank[x:x + 2] for x in xrange(0,len(remove_blank), 2)]
    print combine_two

1 个答案:

答案 0 :(得分:2)

让我们看看这里出了什么问题。我做了一些猜测,但希望它们是相关的。

  1. 您的convert_pdf_to_text()函数返回包含PDF所有文本的单个长字符串。
  2. 您将文本拆分为", ",从而生成字符串列表。
  3. 根据您的示例数据,此列表看起来像这样(每个元素在这里单独一行):

    Dahl
    Preface to Democratic Theory(line break)(bullet)(tab)Schumpeter
    Captitalism
    Socialism
    and Democracy (Introduction and part IV only)(line break)(bullet)(tab)Machpherson
    Life and Times of Liberal Democracy(line break)(bullet)(tab)Dahl
    Democracy and its Critics
    

    因为您在", "上拆分而不考虑数据被格式化为行的事实,所以您最终会得到每个项目中多行的内容。

    1. 现在您使用filter()迭代此列表并过滤掉所有不正确的列表。非空字符串为true,并且所有元素都是非空字符串,因此所有元素都可以通过。因此,filter()无法执行任何操作。
    2. 你似乎想要的更像是这样:

      lines = [line.split(", ", 1) for line in string.splitlines() if ", " in line]
      

      在这里,我们首先拆分行,过滤掉任何不包含逗号空间的行,然后根据在第一个逗号空间中拆分字符串返回列表列表。