Как надежно извлечь имена авторов из PDF-документов? - PullRequest
0 голосов
/ 29 мая 2018

Я хотел бы извлечь имена авторов из PDF-документов.Кто-нибудь знает надежный способ сделать это?

Например, я хотел бы извлечь имя Archana Shukla из этого pdf https://arxiv.org/pdf/1111.1648

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

PDF-документы содержат метаданные.Он включает информацию о документе и его содержании, такую ​​как имя автора, ключевые слова, информация об авторских правах.См. Adobe doc .

Вы можете использовать PyPDF2 для извлечения метаданных PDF.См. Документацию о классе DocumentInformation .

Эта информация может быть не заполнена и может быть пустой.Итак, одна из возможностей - проанализировать начало или конец текста и извлечь то, что вы считаете именем автора.Конечно, это не надежно.Но если у вас есть библиографическая база данных, вы можете попробовать найти совпадение.

В настоящее время редакторы, такие как Microsoft Word или Libre Office Writer, всегда заполняют имя автора в метаданных.И это копируется в PDF при экспорте ваших документов.Итак, это должно работать для вас.Попробуйте и скажите нам!

0 голосов
/ 29 мая 2018

Я собираюсь заранее предположить, что у вас есть способ извлечь текст из PDF-документа , поэтому вопрос действительно в том, "как я могу определить автора из этого текста".Я думаю, что одно простое решение - использовать переписку по электронной почте.Вот пример реализации:

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, но, тем не менее, я думаю, что это должно быть хорошей отправной точкой.

0 голосов
/ 29 мая 2018

Во-первых, есть несколько PDF-файлов с изображениями.Я не знаю, сможете ли вы легко извлечь текст из изображения.Но из упомянутой вами ссылки в формате pdf я думаю, что это можно сделать.Существует пакет под названием PyPDF2 , который, как я знаю, может извлекать текст из pdf.Осталось только отсканировать последние несколько страниц и проанализировать имена авторов.

Пример использования описанного пакета здесь .Некоторые из перечисленных здесь кодов выглядит следующим образом:

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