通过从 Word 文档中提取文本,用户可以轻松获取文档中包含的文字信息,对文本进行处理、分析和组织等操作,从而完成文本挖掘、情感分析和自然语言处理等任务。另一方面,提取图像可以获取 Word 文档中嵌入的视觉元素,并用于完成图像识别、内容提取或创建图像数据库等任务。本文将介绍如何使用 Spire.Doc for Python 通过 Python 程序提取 Word 文档中的文本和图像。
安装 Spire.Doc for Python
本教程需要用到 Spire.Doc for Python 和 plum-dispatch v1.7.4。可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc
如果您不确定如何安装,请参考:如何在 Windows 中安装 Spire.Doc for Python
用 Python 提取 Word 文档指定段落中的文本
可以使用 Section.Paragraphs[index] 属性从特定节中获取特定段落,接着通过 Paragraph.Text 属性提取该段落的文本内容。具体操作步骤如下:
- 创建 Document 类的对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文件。
- 通过 Document.Sections[index] 属性获取指定节。
- 通过 Section.Paragraphs[index] 属性获取指定段落。
- 通过 Paragraph.Text 属性从该段落中提取文本。
- Python
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
doc = Document()
# 加载一个Word文档
doc.LoadFromFile("示例.docx")
# 获取指定的节(section)
section = doc.Sections[0]
# 获取指定的段落(paragraph)
paragraph = section.Paragraphs[1]
# 从段落获取文本
text = paragraph.Text
# 保存提取的段落为TXT文件
with open("output/提取段落.txt", "w", encoding="utf-8") as file:
file.write(text)
用 Python 提取 Word 文档中的所有文本
如果需要获取 Word 文档中的所有文本,可以使用 Document.GetText() 方法直接提取。具体操作步骤如下:
- 创建 Document 类的对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文件。
- 使用 Document.GetText() 方法提取文档中的所有文本。
- Python
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
doc = Document()
# 加载一个Word文档
doc.LoadFromFile("示例.docx")
# 获取文档所有文本
text = doc.GetText()
# 保存获取的文本为TXT文件
with open("output/提取文本.txt", "w", encoding="utf-8") as file:
file.write(text)
用 Python 提取 Word 文档中的所有图像
Spire.Doc for Python 还支持提取 Word 文档中的所有图像,只需要遍历文档中的子对象,并保存其中为 DocPicture 类的实例的子对象即可。详细操作步骤如下:
- 创建 Document 类的对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文件。
- 循环遍历文档中的子对象。
- 判断特定子对象是否为 DocPicture 类的实例。如果是,则通过 DocPicture.ImageBytes 属性获取图像数据。
- 将图像数据写入 PNG 文件。
- Python
import queue
from spire.doc import *
from spire.doc.common import *
# 创建一个Document对象
doc = Document()
# 加载一个Word文件
doc.LoadFromFile("示例.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 = "图片-{}.png".format(i)
with open("output/Images/"+fileName,'wb') as imageFile:
# 将图片写入指定路径
imageFile.write(item)
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。