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

742fc73a8782307ef23d05fd128cacbd.png

Программное извлечение данных, таких как текст и изображения, из документов 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)

Выход:

f8ed0bdddb77345391298bae062dca38.png

Извлечение таблиц из документа 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)

Выход:

40e084100cc6711f2f81dacfb3633e08.png

Извлечение изображений из документа 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)

Выход:

df8e64b427f61a6e82894605a52de6f4.png

Заключение

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

© Habrahabr.ru