使用Python解析pdf并提取作者和书名

使用Python解析pdf并提取作者和书名,python,pdf,split,Python,Pdf,Split,我有一份pdf格式的邮件参考列表。邮件列表有一个非常通用的格式,即作者姓名后跟书名。 考虑下面的例子: 美国阅读清单 民主理论 •达尔,《民主理论序言》 •熊彼特、资本主义、社会主义和民主(仅导言和第四部分) •自由民主的个人、生活和时代 •达尔、民主及其批评者 现在,我尝试使用pdf miner解析pdf,并创建一个列表,其中第一个索引是作者姓名,第二个索引是书籍名称,如下所示: lines = [line.split(", ", 1) for line in string.splitline

我有一份pdf格式的邮件参考列表。邮件列表有一个非常通用的格式,即作者姓名后跟书名。 考虑下面的例子:

美国阅读清单

民主理论

•达尔,《民主理论序言》

•熊彼特、资本主义、社会主义和民主(仅导言和第四部分)

•自由民主的个人、生活和时代

•达尔、民主及其批评者

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

lines = [line.split(", ", 1) for line in string.splitlines() if ", " in line]
[达尔,民主理论序言]

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

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

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

  • convert\u pdf\u to\u text()
    函数返回一个包含pdf所有文本的长字符串
  • 您在“
    ”和“
    上拆分文本,从而生成字符串列表
  • 根据您的示例数据,此列表如下所示(此处每个元素位于单独的一行):

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

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

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

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

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

  • convert\u pdf\u to\u text()
    函数返回一个包含pdf所有文本的长字符串
  • 您在“
    ”和“
    上拆分文本,从而生成字符串列表
  • 根据您的示例数据,此列表如下所示(此处每个元素位于单独的一行):

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

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

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

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

    Hi kindall,感谢您的帮助。但我仍然没有得到正确的输出。我得到的是这样的东西:[《达尔》,《民主理论的序言》,《坎佩特、资本主义、社会主义和民主》(导论和第四部分)马切人、自由民主的生活和时代达尔、民主及其批评者》]我猜你的
    convert_pdf_to_txt()
    不包括换行符。经过思考,这可能是因为PDF实际上不包括换行符(它们只说“在此处打印下一位”,而“此处”恰好位于下一行的开头)。是否有其他方法可以检测一个项目的结束和下一个项目的开始?包括子弹吗?如果是这样的话,你可以试着对这些进行拆分。我不知怎么地使用了新的行拆分功能来实现结果。然而,在尝试将作者姓名和书名结合起来时,通过对较大列表中的每个第一和第二元素单独列出,我遇到了一个问题。标题与作者姓名一起出现。。这里是一个结果片段:[美国阅读清单],[修订版//,[民主理论],[麦迪逊],[联邦党人],'','','达尔','民主理论序言']我们能做些什么来删除标题吗?我想他会在我的回答中插入一些关于过滤掉没有的行的内容“,”他们应该处理好这件事……你好,多谢你的帮助。但我仍然没有得到正确的结果。我得到的是这样的东西:[《达尔》,《民主理论序言》、《坎佩特、资本主义、社会主义和民主》(仅引言和第四部分)马切人、自由民主的生活和时代卡尔、民主及其批评者]]我猜你的
    convert_pdf_to_txt()
    不包括换行符。这可能是因为pdf实际上不包括换行符(它们只说“在此处打印下一位”,而“此处”恰好在下一行的开头)。是否有其他方法可以检测一个项目的结束位置和下一个项目的开始位置?是否包括项目符号?如果是,您可以尝试对这些项目进行拆分。我不知何故使用了新的行拆分功能来实现结果。但是,在尝试将作者姓名和书名结合起来时,请分别列出每个第一个和第二个元素在更大的列表中,我遇到了一个问题。标题与作者姓名一起出现。这里是一个结果片段:[《美国阅读列表》,《修订//》,[《民主理论》,《麦迪逊》,[《联邦主义者》,“,”,《达尔》,《民主理论序言》]我们能做些什么来删除标题吗?我想他会在我的回答中提到过滤掉那些没有“,”的行,这些行应该可以处理。。。