本文介绍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任务