最近领导让我们把自己公司内部的知识库平台里面的方案进行打标
材料类型:80%为ppt、word
材料概述:产品、方案、案例(偏售前的方案)
一、PPT:我自己是没有什么更好的方案做打标工作,应该会用到图像算法之类的,我现在的水平解决不了,只能用微信截图识别文本复制粘贴,顶多用GPT帮我处理一下文本格式
二、WORD:word如果用了结构分明的heading格式做目录,那么将会非常好处理。由于文档是只读格式,所以纯纯用word转化为excel是可以通过wps或者office做到,但是对于目录格式有限制,但是由于我没有编辑权限所以采用了python脚本处理
预期效果:提取目录文本为结构化数据,且heading1在表格的第一列,heading2为表格的第二列,依次排布且行之间要有对应关系。
使用脚本:
import pandas as pd
from docx import Document
def read_toc(doc_path):
doc = Document(doc_path)
toc = []
for paragraph in doc.paragraphs:
if paragraph.style.name.startswith('Heading'):
level = int(paragraph.style.name.split(' ')[-1])
text = paragraph.text
toc.append((level, text))
return toc
def toc_to_excel(toc, excel_path):
max_level = max(level for level, _ in toc)
data = {f'Title_{i+1}': [] for i in range(max_level)}
current_row = {f'Title_{i+1}': '' for i in range(max_level)}
for level, text in toc:
current_row[f'Title_{level}'] = text
for i in range(level + 1, max_level + 1):
current_row[f'Title_{i}'] = ''
data = {key: data[key] + [current_row[key]] for key in data}
df = pd.DataFrame(data)
df.to_excel(excel_path, index=False)
# 使用示例
doc_path =r'C:\Users\xxx\Downloads\xxxxx.docx'
excel_path = 'output_excel_file.xlsx'
toc = read_toc(doc_path)
toc_to_excel(toc, excel_path)
处理结果:
复制粘贴问题解决~
代码解释:
这段代码的目标是读取一个 Word 文档中的标题,根据标题的层级将其放入 Excel 表格的不同列中,并保存为一个 Excel 文件。
具体步骤如下:
-
read_toc
函数:- 该函数接收一个 Word 文档的路径
doc_path
作为输入。 - 使用
docx
库的Document
类来打开 Word 文档。 - 遍历文档中的每个段落,检查段落的样式是否以 'Heading' 开头,如果是则提取出标题的层级和文本内容,并将它们作为元组
(level, text)
添加到列表toc
中。 - 返回包含标题信息的
toc
列表。
- 该函数接收一个 Word 文档的路径
-
toc_to_excel
函数:- 该函数接收标题信息列表
toc
和 Excel 文件路径excel_path
作为输入。 - 计算出标题的最大层级
max_level
。 - 初始化两个字典
data
和current_row
,它们用于存储数据和当前行的标题信息。 - 遍历
toc
中的每个标题信息,更新current_row
中对应层级的标题,并将数据添加到data
中。 - 创建一个 DataFrame
df
,其中每个列的标题都以 'Title_' 开头,并将数据保存为 Excel 文件。
- 该函数接收标题信息列表
-
使用示例:
- 提供了一个具体的 Word 文档路径
doc_path
和保存 Excel 文件的路径excel_path
。 - 调用
read_toc
函数读取标题信息,并将其传递给toc_to_excel
函数,生成 Excel 文件。
- 提供了一个具体的 Word 文档路径
在使用时,你需要将 doc_path
替换为你的实际 Word 文档路径,然后运行脚本。生成的 Excel 文件将包含每个层级的标题,并且每个层级的标题都会在 Excel 表格的相应列中。