Как извлечь выделенный текст из PDF? - PullRequest
0 голосов
/ 04 июля 2019

Решения этого , этого и этого вопроса показывают, как извлечь комментарии, сделанные во всплывающих / заметках и в выделенных текстовых областях.Однако я не нашел решения, как извлечь выделенный текст сам.Возможно ли это с помощью Python (или bash, инструментов командной строки Unix или другого решения для командной строки, простого и не слишком большого для установки)?

До сих пор я пытался использовать PyPDF2 и python-poppler-qt5PyPDF2 я могу получить регионы QuatPoints или Rect, которые, как я подозреваю, могут быть использованы для извлечения области текста со страницы, но я не смог заставить p2.extractText() работать вообще, поэтому не уверен, как поступить:

import PyPDF2 as pp2

pdf_file = open('sample.pdf', 'rb')
pdf = pp2.PdfFileReader(pdf_file)
p2 = pdf.getPage(2)
p2['/Annots'][4].getObject()

Out:

    {'/Type'{'/Type': '/Annot',
     '/Subtype': '/Highlight',
     '/Subj':'Highlight',
     '/T': 'joel',
     '/F': 4,
     '/NM': 'b3a6d3a3-bdab-457b-a769-9d82e616798a',
     '/CreationDate': 'D:20190704104139',
     '/CA': 1,
     '/Rect': [58.9415, 184.958, 550.855, 235.086],
     '/C': [0.99608, 0.99608, 0.68235],
     '/QuadPoints': [430.769,
      219.662,
      550.304,
      219.662,
      430.769,
      235.086,
      550.304,
      235.086,
      58.9415,
      202.585,
      531.575,
      202.585,
      58.9415,
      218.56,
      531.575,
      218.56,
      59.4924,
      185.509,
      313.437,
      185.509,
      59.4924,
      201.483,
      313.437,
      201.483],
     '/AP': {'/N': {'/Subtype': '/Form',
       '/FormType': 1,
       '/BBox': [0, 0, 491.914, 50.1278],
       '/Resources': {'/ExtGState': {'/TransGs': {'/CA': 1,
          '/ca': 1,
          '/BM': '/Multiply',
          '/Type': '/ExtGState'}}},
       '/Group': {'/S': '/Transparency', '/Type': '/Group'},
       '/Filter': '/FlateDecode'}},
     '/M': "D:20190704104139+00'00'",
     '/Contents': 'sample text written on highlighted area'}

С помощью python-poppler-qt5 я также могу получить границу области выделения, но когда я пытаюсь извлечь текст из этой области, возвращается пустая строка:

import popplerqt5                                                                              
d = popplerqt5.Poppler.Document.load('sample.pdf')                                                          
p2 = d[2]                                                                                      
a = p2.annotations()                                                                           
t = a[4]
p2.text(t.boundary())  # Returns an empty string.

Мое текущее решение - использовать Zotero с zotfile, который делает именно это ( через pdf.js ), но это немного утомительно, когда у меня есть несколько PDF-файлов, поэтому я быхотел бы автоматизировать процесс, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...