from docx.shared import Pt from docx.enum.text import WD_COLOR_INDEX from collections import Counter def r(lis): counter = Counter(lis) return counter.most_common(1)[0][0] def parse_word_font(doc_path): """ 解析Word文档的字体信息,返回每个文本块的字体属性 :param doc_path: Word文档路径(.docx) :return: 列表,每个元素为{text: 文本内容, font: 字体属性字典} """ doc = Document(doc_path) font_info_list = [] fontsizeall=[] # 1. 解析段落文本的字体 for d,para in enumerate(doc.paragraphs): if '一九七五' in para.text: pass if not para.text.strip(): # 跳过空段落 continue # 段落可能包含多个run(不同字体样式的文本块) if para.style.font.size: parafont=para.style.font.size.pt else: parafont=None # word文档解析原理.Word里面顶层是paragraph, 如果paragraph里面写字号大小了.那么里面的子结构runs里面的字体大小就是None! tmp=[] for run in para.runs: if not run.text.strip(): continue # 提取字体核心属性 font_attr = { "name": run.font.name, # 字体名称(如"微软雅黑") "size": run.font.size.pt if run.font.size else parafont, # 字号(磅) "bold": run.font.bold, # 加粗(True/False/None) "italic": run.font.italic, # 斜体(True/False/None) "underline": run.font.underline, # 下划线(None/True/样式) "color": run.font.color.rgb if run.font.color.rgb else None, # 字体颜色(RGB) "highlight": run.font.highlight_color, # 高亮颜色(WD_COLOR_INDEX枚举) "strike": run.font.strike, # 删除线(True/False/None) "subscript": run.font.subscript, # 下标(True/False/None) "superscript": run.font.superscript, # 上标(True/False/None) } fontsizeall.append(font_attr['size']) tmp.append({ "text": run.text, "font": font_attr, "type": "paragraph" # 标记文本类型:段落 }) tmp_fixed={} tmp_fixed['text']=''.join([i['text'] for i in tmp]) tmp_fixed['name']=r([i['font']['name'] for i in tmp]) tmp_fixed['size']=r([i['font']['size'] for i in tmp]) tmp_fixed['bold']=r([i['font']['bold'] for i in tmp]) tmp_fixed['italic']=r([i['font']['italic'] for i in tmp]) tmp_fixed['underline']=r([i['font']['underline'] for i in tmp]) tmp_fixed['strike']=r([i['font']['strike'] for i in tmp]) tmp_fixed['subscript']=r([i['font']['subscript'] for i in tmp]) tmp_fixed['superscript']=r([i['font']['superscript'] for i in tmp]) tmp_fixed['color']=r([i['font']['color'] for i in tmp]) tmp_fixed['type']=r([i['type'] for i in tmp]) font_info_list.append(tmp_fixed) # 2. 解析表格中的文本字体 for table in doc.tables: for row in table.rows: for cell in row.cells: for para in cell.paragraphs: for run in para.runs: if not run.text.strip(): continue font_attr = { "name": run.font.name, "size": run.font.size.pt if run.font.size else None, "bold": run.font.bold, "italic": run.font.italic, "underline": run.font.underline, "color": run.font.color.rgb if run.font.color.rgb else None, "highlight": run.font.highlight_color, } fontsizeall.append(font_attr['size']) font_info_list.append({ "text": run.text, **font_attr, "type": "table_cell" # 标记文本类型:表格单元格 }) fontsizeall=[i for i in fontsizeall if i is not None] originsize=r(fontsizeall) for d,i in enumerate(font_info_list): font_info_list[d]['size']=originsize if font_info_list[d]['size'] is None else font_info_list[d]['size'] return font_info_list # 调用示例 if __name__ == "__main__": doc_path = "new2\叶圣陶集 第25卷 书信 2 第2版_11994042.docx" # 替换为你的Word文档路径 font_info = parse_word_font(doc_path) # 打印解析结果 for idx, item in enumerate(font_info[:10]): print(f"=== 文本块 {idx+1} ===") print(f"文本内容: {item['text']}") print(f"文本类型: {item['type']}") print("字体属性:") for k, v in item['font'].items(): # 格式化颜色/高亮显示 if k == "color" and v: v = f"RGB({v[0]}, {v[1]}, {v[2]})" elif k == "highlight" and v: v = f"{v.name} ({v.value})" print(f" {k}: {v}") print("-" * 50)解析word格式和字体
张小明
前端开发工程师
Qwen3-VL-30B-A3B-Thinking技术深度解析:重新定义多模态AI边界
Qwen3-VL-30B-A3B-Thinking技术深度解析:重新定义多模态AI边界 【免费下载链接】Qwen3-VL-30B-A3B-Thinking 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-VL-30B-A3B-Thinking 在人工智能技术快速迭代的今天,多模态大模型正成为推动…
Excalidraw如何集成到Vue项目?结合vuedraggable实现拖拽编辑
Excalidraw集成Vue实现拖拽编辑:基于vuedraggable的实战方案 在当前低代码与可视化协作工具快速发展的背景下,越来越多的企业系统开始嵌入图形化编辑能力。比如产品经理需要快速绘制架构草图,开发团队要在文档中插入流程线框图,或…
LSTM与Transformer对比分析:Linly-Talker中语言模型选型思路
LSTM与Transformer对比分析:Linly-Talker中语言模型选型思路 在智能交互系统日益普及的今天,数字人已不再是简单的动画形象,而是逐步演变为具备“理解—思考—表达”能力的实时对话体。尤其像 Linly-Talker 这样集成了语音识别(AS…
CosyVoice语音模型微调实战:从零到一掌握个性化语音合成
CosyVoice语音模型微调实战:从零到一掌握个性化语音合成 【免费下载链接】CosyVoice Multi-lingual large voice generation model, providing inference, training and deployment full-stack ability. 项目地址: https://gitcode.com/gh_mirrors/cos/CosyVoice …
Typst数学公式完美对齐指南:告别错位困扰
在学术写作和科技文档创作中,数学公式的排版质量直接影响内容的专业性和可读性。Typst作为新一代标记语言排版系统,以其简洁优雅的语法和强大的数学排版能力,正在成为科研工作者和技术文档作者的新宠。然而,许多用户在初次使用Typ…
FaceFusion项目未来路线图:即将加入的表情迁移增强功能
FaceFusion项目未来路线图:即将加入的表情迁移增强功能 在影视特效、虚拟主播和数字人应用日益普及的今天,一个共同的技术瓶颈逐渐浮现:如何让人脸替换不仅“换脸”,还能“传神”?当前大多数AI换脸工具虽然能实现身份转…