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