Сегментируйте документы pdf, doc, docx в тексты уровня абзаца - PullRequest
0 голосов
/ 16 октября 2019

Я хочу разобрать несколько длинных научных документов для задания NER . Документы представлены в формате pdf, doc и docx и, к сожалению, не имеют одинаковой структуры.

Я пытаюсь извлечь необработанный текст из документов на Python, одновременно создавая вложенные документы для таблиц и текста.

У меня есть функции, которые надежно извлекают текст из документов и записывают их,вместе с ярлыками документа, в списке.

import re, os
import textract, PyPDF2
​
import pandas as pd
import numpy as np
def get_doc_content(filename):
  text = textract.process(filename).decode("utf-8")
  return re.sub("[\n|]", " ", text) 

def get_pdf_content(filename):
  pdf_file = open(filename, mode='rb')
  pdf_doc = PyPDF2.PdfFileReader(pdf_file)
  current_page = 0
  text = ''
  while(current_page < pdf_doc.numPages ):  
    page = pdf_doc.getPage(current_page)
    text += re.sub("[\n]","", page.extractText()) 
    current_page += 1
  return text

input_dir = '/my_path.../'
file_names = []
content = []
for fname in os.listdir(input_dir):
  fpath = os.path.join(input_dir, fname)
  if fname.endswith(".doc") or fname.endswith(".docx"):
    file_names.append(fname)
    content.append(get_doc_content(fpath))    
  elif fname.endswith(".pdf"):
    file_names.append(fname)
    content.append(get_pdf_content(fpath))    
  else:
    print ('file type not supported: %s' % (fname))
    continue

df= pd.DataFrame({'text':content, 'doc_label':file_names})

Это дает мне следующий вывод - при просмотре первой записи: Output1:

df.head(1)
>>> text                doc_label
    extracted raw text...   doc_1


Однако проанализированный файл содержит несколько таблиц и длинное сырьетекст, поэтому я стремлюсь к выводу, подобному этому (для первого файла примера). Вывод2:

df
>>> text              par_label        doc_label
    extracted table 1...  table_1          doc_1
    extracted table 2...  table_2          doc_1
    extracted text 1...   text_1           doc_1       
    extracted table 3...  table_3          doc_1
    extracted text 2...   text_2           doc_1
    .
    .
    .

Мой вопрос: Как настроить свой код (есть ли обходные пути Python), чтобы обнаруживать таблицы / фрагменты текста в этих документах и ​​получать output2 вместо output1 .

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

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