使用spaCy处理PDF和Word文档的布局分析技术

本文介绍spaCy Layout技术,该技术能够将PDF、Word等文档转换为结构化数据,支持文本分类、命名实体识别等NLP任务,并详细介绍其API接口和使用方法。

spaCy Layout:使用spaCy处理PDF和Word文档的布局分析

该插件与Docling集成,可将PDF、Word等文档转换为结构化数据,生成spaCy的Doc对象。支持获取文档中的文本段落、标题、表格(转换为pandas.DataFrame)等布局元素,便于后续进行自然语言处理。

安装与基础使用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import spacy
from spacy_layout import spaCyLayout

nlp = spacy.blank("en")
layout = spaCyLayout(nlp)
doc = layout("./document.pdf")

# 获取文档文本
print(doc.text)  
# 获取文档布局信息
print(doc._.layout)
# 获取文档中的表格
print(doc._.tables)
# 获取Markdown格式文档
print(doc._.markdown)

批量处理文档

1
2
3
paths = ["one.pdf", "two.pdf", "three.pdf"]
for doc in layout.pipe(paths):
    print(doc._.layout)

表格数据处理

表格会被标记为"table"类型的span,数据存储在pandas.DataFrame中:

1
2
3
for table in doc._.tables:
    print(table._.data)  # 获取表格数据
    print(table._.layout)  # 获取表格位置信息

序列化存储

1
2
3
4
5
from spacy.tokens import DocBin

docs = layout.pipe(["one.pdf", "two.pdf"])
doc_bin = DocBin(docs=docs, store_user_data=True)
doc_bin.to_disk("./docs.spacy")

可视化示例

使用matplotlib可视化文档布局和边界框:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

fig, ax = plt.subplots(figsize=(12, 16))
for section in doc.spans["layout"]:
    rect = Rectangle(
        (section._.layout.x, section._.layout.y),
        section._.layout.width,
        section._.layout.height,
        fill=False, color="blue"
    )
    ax.add_patch(rect)
plt.show()

该技术特别适用于:

  • 文档内容分析
  • RAG管道中的文档分块
  • 表格数据提取
  • 结合spaCy进行实体识别等NLP任务
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计