Извлечение текста и изображений из документов Word с помощью Python

от автора

Программное извлечение данных, таких как текст и изображения, из документов Word может значительно облегчить автоматизацию задач по обработке документов, упростить анализ и интеграцию этих данных в другие системы.

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

  • Извлечение текста из документа Word

  • Извлечение таблиц из документа Word

  • Извлечение изображений из документа Word

Библиотека Python для чтения документов Word

Spire.Doc for Python — это библиотека, которая упрощает работу с документами Microsoft Office Word. Она позволяет программно читать, записывать и манипулировать документами Word, облегчая автоматизацию задач, связанных с документами.

Вы можете установить библиотеку из PyPI с помощью следующей команды.

pip install Spire.Doc

Извлечение текста из документа Word

В Spire.Doc вы можете загрузить файл Word с помощью метода Document.LoadFromFile(), указав в качестве параметра путь к файлу. После этого вы можете получить текст документа с помощью метода Document.GetText().

from spire.doc import * from spire.doc.common import *  # Создайте объект документа doc = Document()  # Загрузите файл Word doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.docx")  # Получите текст из всего документа text = doc.GetText()  # Сохраните текст в текстовый файл with open("C:\\Users\\Administrator\\Desktop\\ExtractedText.txt", "w", encoding="utf-8") as text_file:     text_file.write(text) 

Выход:

Извлечение таблиц из документа Word

С помощью Spire.Doc доступ к таблицам в разделе документа Word очень прост. Вы можете использовать свойство Section.Tables, чтобы получить коллекцию всех таблиц, присутствующих в этом разделе. Получив эту коллекцию, вы можете найти конкретную таблицу по ее индексу или другим идентифицирующим свойствам.

Получив конкретную таблицу, вы можете взаимодействовать с ее ячейками, обратившись к свойству Rows, которое предоставляет коллекцию всех строк в таблице. Каждая строка содержит несколько ячеек, доступ к которым можно получить через свойство Cells.

Чтобы извлечь текстовое содержимое из каждой ячейки, вы используете объект TableCell. Вызвав TableCell.Paragraphs.get_Item().Text, вы можете получить текст каждого абзаца в ячейке.

from spire.doc import * from spire.doc.common import *  # Создайте объект документа doc = Document()  # Загрузите документ Word doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.docx")  # Переберите секции for i in range(doc.Sections.Count):      # Получите конкретную секцию     section = doc.Sections.get_Item(i)      # Получите таблицы из секции     tables = section.Tables      # Переберите таблицы     for j in range(0, tables.Count):          # Получите определённую таблицу         table = tables.get_Item(j)          # Объявите переменную для хранения данных таблицы         tableData = ""          # Переберите строки таблицы         for m in range(0, table.Rows.Count):              # Переберите ячейки строки             for n in range(0, table.Rows.get_Item(m).Cells.Count):                  # Получите ячейку                 cell = table.Rows.get_Item(m).Cells.get_Item(n)                  # Получите текст в ячейке                 cellText = ""                 for para in range(cell.Paragraphs.Count):                     paragraphText = cell.Paragraphs.get_Item(para).Text                     cellText += (paragraphText + "     ")                  # Добавьте текст к строке                 tableData += cellText              # Добавьте новую строку             tableData += "\n"              # Сохраните данные таблицы в текстовый файл         with open(f"output/WordTable_{i+1}_{j+1}.txt", "w", encoding="utf-8") as f:             f.write(tableData)

Выход:

Извлечение изображений из документа Word

Чтобы извлечь изображение из документа Word, сначала нужно пройтись по дочерним объектам, содержащимся в документе. Каждый дочерний объект представляет различные элементы документа, такие как текст или изображения.

Во время этой итерации необходимо проверить, не относится ли какой-либо из дочерних объектов к типу DocPicture, который специально представляет изображения в документе. Если дочерний объект действительно является DocPicture, вы можете получить доступ к данным изображения, используя свойство ImageBytes объекта DocPicture. Это свойство предоставляет необработанные байтовые данные изображения, которые затем можно сохранить в файл.

Вы можете указать желаемый формат файла (например, PNG, JPEG) и путь, по которому вы хотите сохранить изображение, что позволит вам успешно извлекать и сохранять изображения для дальнейшего использования.

import queue from spire.doc import * from spire.doc.common import *  # Создайте объект документа doc = Document()  # Загрузите файл Word doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.docx")  # Создайте объект очереди nodes = queue.Queue() nodes.put(doc)  # Создайте список images = []  while nodes.qsize() > 0:     node = nodes.get()      # Переберите дочерние объекты в документе     for i in range(node.ChildObjects.Count):         child = node.ChildObjects.get_Item(i)          # Определите, является ли дочерний объект изображением         if child.DocumentObjectType == DocumentObjectType.Picture:             picture = child if isinstance(child, DocPicture) else None             dataBytes = picture.ImageBytes              # Добавьте данные изображения в список              images.append(dataBytes)                   elif isinstance(child, ICompositeObject):             nodes.put(child if isinstance(child, ICompositeObject) else None)  # Переберите изображения в списке for i, item in enumerate(images):     fileName = "Image-{}.png".format(i)     with open("ExtractedImages/"+fileName, 'wb') as imageFile:          # Запишите изображение в указанное место         imageFile.write(item)

Выход:

Заключение

В этой статье мы рассмотрели, как извлекать текст, таблицы и изображения из документа Word с помощью Spire.Doc for Python — библиотеки для создания, чтения и редактирования документов MS Word в приложении на Python. Надеемся, что эта статья будет для вас информативной и полезной.


ссылка на оригинал статьи https://habr.com/ru/articles/872638/