当前位置: 首页 > news >正文

mineru处理后的文档生成对应层级的标题

mineru把pdf文档转换为markdown文档,但标题都是一级标题。
对mineru处理后的文档进行再处理,生成对应层级的标题

# md_head.py
import redef is_valid_title(title: str) -> bool:"""检查标题是否符合以下格式之一:1. 一级标题:数字+空格+第(如"1 第")2. 多级标题:a.b.c.d.e.f格式(a-f为0-9的数字)"""# 检查一级标题格式(数字+空格+第)level1_pattern = r'^\s*\d+\s*第\s*.*$'# 检查多级标题格式(a.b.c...)multi_level_pattern = r'^\s*(\d)(\.\d){1,5}\s*.*$'return bool(re.fullmatch(level1_pattern, title)) or \bool(re.fullmatch(multi_level_pattern, title))def convert_to_markdown_header(title: str) -> str:"""将标题转换为Markdown格式:1. 一级标题:数字+空格+第 → # 数字 第...2. 多级标题:a.b.c.d.e.f → #...# a.b.c.d.e.f(根据点号数量确定层级)"""# 处理一级标题level1_match = re.fullmatch(r'^\s*(\d+)\s*第\s*(.*)$', title)if level1_match:num = level1_match.group(1)content = level1_match.group(2).strip()return f"# {num}{content if content else ''}"# 处理多级标题(保持原有逻辑)if not re.fullmatch(r'^\s*(\d)(\.\d){1,5}\s*.*$', title):return title  # 如果不是有效多级标题,直接返回原内容parts = title.split('.')level = len(parts)# Markdown标题最多6级(######)if level > 6:return title  # 超过6级则不处理return '#' * level + ' ' + titledef process_file(input_file: str, output_file: str):"""处理文件:读取input_file,转换标题后写入output_file"""with open(input_file, 'r', encoding='utf-8') as f_in:lines = [line.rstrip('\n') for line in f_in]processed_lines = []for line in lines:if is_valid_title(line):processed_line = convert_to_markdown_header(line)processed_lines.append(processed_line)else:processed_lines.append(line)with open(output_file, 'w', encoding='utf-8') as f_out:f_out.write('\n'.join(processed_lines))if __name__ == "__main__":import sysif len(sys.argv) != 3:print("用法: python md_head.py <输入文件> <输出文件>")sys.exit(1)input_filename = sys.argv[1]output_filename = sys.argv[2]try:process_file(input_filename, output_filename)print(f"处理完成,结果已保存到 {output_filename}")except FileNotFoundError:print(f"错误:文件 {input_filename} 不存在")except Exception as e:print(f"处理过程中发生错误:{e}")
http://www.dtcms.com/a/449830.html

相关文章:

  • 台山网站建设公司公司网站建设如何撤销
  • 辛集做网站公司麻豆秋白色蕾丝半身裙
  • Java:面向对象:内部类:静态内部类与非静态内部类的比较
  • 基于32位MCU的LVGL移植
  • 基于STM32单片机的语音控制智能停车场设计
  • (Kotlin协程十三)Dispatchers.Main, IO, Default 分别适用于什么场景?它们的底层是什么?
  • 郑州网站建设 seo郑州网络营销公司哪家好
  • 中山精品网站建设信息手机可以创建网站吗
  • 学习Java第三十二天——黑马点评43~47
  • 宿迁网站推广公司做企业宣传网站
  • 优选算法-双指针:6.和为s的两个数字
  • [linux仓库]System V 进程通信详解:System V消息队列、信号量
  • css过渡属性
  • Linux系统--文件系统--动静态库
  • Spring进阶 - SpringMVC实现原理(二)DispatcherServlet处理请求的过程
  • SQL 面试高频:INNER JOIN vs LEFT JOIN 怎么考?
  • 【51单片机】【protues仿真】基于51单片机智能路灯控制系统
  • 3d模型免费素材网站wordpress如何修改行距
  • 再探类对象——C++入门进阶
  • 公司网站如何维护wordpress去掉title前空格及keywords最后的逗号
  • 仙居谁认识做网站的广告投放平台代理
  • 智慧餐厅管理系统qq群排名优化软件官网
  • InnoDB核心限制与应对策略
  • 贵州建设厅监理协会网站前后端分离实现网站开发
  • QNX 开发环境搭建
  • Java技术栈 —— 使用MinIO进行大文件分片上传与下载
  • `modprobe`命令 与 `KVM`模块 笔记251006
  • 山东省建设监理协会网站打不开赣州招聘网最新招聘
  • 贵阳网站建设设计个人网页设计作品集分析
  • 音乐介绍网站怎么做做暧暧小视频网站