Время прочтения: 2 мин.
На сайте есть уже большое количество различных статей с разбором разных алгоритмов NLP. Мы уже знаем об основных этапах обработки текста перед его анализом (отчистка текста от лишних символов, лемматизация, отчистка от стопслов). Однако я хочу рассказать про этап, который может вызвать определённые трудности, если текст изначально хранится в формате docx и в нём есть и параграфы с текстом и таблицы.
Передо мной стояла задача обработать текстовые документы, с сохранением последовательности текста внутри него. Однако вы должны знать, что при использовании библиотеки docx на языке python параграфы и таблицы вы можете получить только в виде двух независимых потоков.
Такой подход перемешает текст и основной смысл текста будет нарушен. Больше всего это может вам помешать, при необходимости восстановить этот текста в правильном порядке. Для решения этой проблемы можно воспользоваться следующим кодом:
if isinstance(parent, _Document):
parent_elm = parent.element.body
elif isinstance(parent, _Cell):
parent_elm = parent._tc
elif isinstance(parent, _Row):
parent_elm = parent._tr
else:
raise ValueError("something's not right")
for child in parent_elm.iterchildren():
if isinstance(child, CT_P):
yield Paragraph(child, parent)
elif isinstance(child, CT_Tbl):
yield Table(child, parent)
document = Document('test.docx')
for block in iter_block_items(document):
if isinstance(block, Paragraph):
print(block.text)
elif isinstance(block, Table):
for row in block.rows:
row_data = []
for cell in row.cells:
for paragraph in cell.paragraphs:
row_data.append(paragraph.text)
print("\t".join(row_data))
Основной принцип этого кода заключается в однопоточной обработке текстового документа и при получении каждого последующего элемента происходит определение его типа (параграф или таблица). Если полученных элемент таблица, то дальше идет следующее разделение на строки и ячейки. На выходе вы получите текст в его первоначальном виде без потери смысла в однопоточном виде.
После этого этапа можно приступать к другим этапам обработки текста, которых вы можете посмотреть в следующих статьях:
Решаем NLP-задачу – классификация текстов по темам;
Обработка текстовых данных методами NLP
Желаю успешного анализа текста с точностью не ниже 0.99.