如何从pdf文件中稳健地提取作者姓名?

时间:2018-05-29 03:35:19

标签: python pdf nlp named-entity-recognition information-extraction

我想从pdf文件中提取作者姓名。有人知道这样做的有效方法吗?

例如,我想从此pdf https://arxiv.org/pdf/1111.1648

中提取名称Archana Shukla

3 个答案:

答案 0 :(得分:2)

PDF文档包含元数据。它包括有关文档及其内容的信息,例如作者姓名,关键字,版权信息。请参阅Adobe doc

您可以使用PyPDF2提取PDF元数据。请参阅有关the DocumentInformation class的文档。

此信息可能无法填写,并且可能显示为空白。因此,一种可能性是解析文本的开头或结尾,并提取您认为的作者姓名。当然,它不可靠。但是,如果您有书目数据库,可以尝试匹配。

如今,Microsoft Word或Libre Office Writer等编辑总是在元数据中填写作者姓名。导出文档时,它将复制到PDF中。所以,这应该适合你。试一试并告诉我们!

答案 1 :(得分:0)

我预先假设您有办法extract text from a PDF document,所以问题实际上是“我怎样才能从这篇文章中找出作者”。我认为一个简单的解决方案是使用通信电子邮件。以下是一个示例实现:

import difflib

# Some sample text
pdf_text="""SENTIMENT ANALYSIS OF DOCUMENT BASED ON ANNOTATION\n
Archana Shukla\nDepartment of Computer Science and Engineering, 
Motilal Nehru National Institute of Technology, 
Allahabad\narchana@mnnit.ac.in\nABSTRACT\nI present a tool which 
tells the quality of document or its usefulness based on annotations."""

def find_author(some_text):
    words = some_text.split(" ")
    emails = []
    for word in words:
        if "@" in word:
            emails.append(word)
    emails_clean = emails[0].split("\n")
    actual_email = [a for a in emails_clean if "@" in a]
    actual_email = actual_email[0]
    maybe_name = actual_email.split("@")[0]
    all_words_lists = [a.split("\n") for a in words]
    words = [a for sublist in all_words_lists for a in sublist]
    words.remove(actual_email)
    return difflib.get_close_matches(maybe_name, words)

在这种情况下,find_author(pdf_text)会返回['Archana']。它并不完美,但并非不正确。我认为你可能会以一些聪明的方式扩展它,可能是通过在结果之后得到下一个词或者将这个猜测与元数据结合,或者甚至通过在文档中找到DOI(如果/何时存在)并通过某些API查找它但是,我认为这应该是一个很好的起点。

答案 2 :(得分:-3)

首先,有一些pdf,其中哪些页面是图像。我不知道你是否可以轻松地从图像中提取文本。但是从你提到的pdf链接,我认为可以做到。存在一个名为PyPDF2的包,据我所知,它可以从pdf中提取文本。剩下的就是扫描最后几页并解析作者名称。

有关如何使用所述包here的示例。其中列出的一些代码如下:

import PyPDF2
pdfFileObj = open('meetingminutes.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
disp(pdfReader.numPages)
pageObj = pdfReader.getPage(0)
pageObj.extractText()