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