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

将大模型输出答案清洗数学公式格式为markdown文件

需求

大模型输出的答案中,通常公式格式为latex格式,无法直接在markdown中显示。因此需要:

将LaTeX的块级公式标识符\[...\]替换为Markdown的`$$...$$`,
行内公式标识符`\(...\)`替换为Markdown的`$...$`。

以下代码可以实现上述功能。

思路

  1. 读取markdown文件
  2. 使用正则表达式匹配公式内容—使用re库
  3. 进行替换—使用re.sub函数
  4. 输出新的markdown内容

代码内容

import re
from pathlib import Path


def convert_latex_to_markdown(text):
    # 替换块级公式 $$...$$ 为 $$...$$
    text = re.sub(r"\\\[(.*?)\\\]", r'$$\1$$', text, flags=re.DOTALL)
    # 替换行内公式 $...$ 为 $...$
    text = re.sub(r"\\\((.*?)\\\)", r'$\1$', text, flags=re.DOTALL)
    return text


def process_markdown_file(input_path, output_path=None):
    # 读取原始文件
    with open(input_path, 'r', encoding='utf-8') as f:
        original_content = f.read()

    # 转换内容
    converted_content = convert_latex_to_markdown(original_content)

    # 生成输出路径
    if not output_path:
        input_file = Path(input_path)
        output_path = input_file.parent / f"{input_file.stem}_converted{input_file.suffix}"

    # 写入新文件
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(converted_content)

    return output_path

if __name__ == "__main__":
    input_path = 'new.md'
    output_path = 'output.md'
    output_path = process_markdown_file(input_path, output_path)
    print(f"Conversion complete! New file saved at: {output_path}")

说明

在 Python 的re模块中,re.DOTALL是一个标志(flag),用于修改正则表达式的行为。它的作用是让点号(.)匹配任何字符,包括换行符(\n)。

默认情况下:

  • 在正则表达式中,点号(.)通常匹配任何字符,但不包括换行符。例如,.*会匹配任意字符(除换行符外),直到遇到换行符为止。

使用re.DOTALL

  • 当使用re.DOTALL标志时,点号(.)会匹配任何字符,包括换行符。这意味着正则表达式可以跨多行匹配内容。

相关文章:

  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(49)万鸦壶焚网络 - 网络延迟时间(Bellman-Ford)
  • 使用 Doris 和 LakeSoul
  • 蓝桥备赛(19)- 哈希表和 unordered_ set 与unordered_map(上)
  • 程序化广告行业(13/89):DSP的深入解析与运营要点
  • C++自学方法论:从零基础到工程实践的体系化路径研究
  • Leetcode:34(二分查找)
  • CNN 稠密任务经典结构
  • 【前端文件下载实现:多种表格导出方案的技术解析】
  • Linux系统下安装Gedit文本编辑器的完整指南
  • 基于YOLOv8深度学习的PCB缺陷检测识别系统【python源码+GUI界面+数据集+训练代码】
  • 跨平台直播美颜SDK开发指南:如何兼容iOS、Android与Web
  • 虚拟系统实验
  • 【redis】set 类型:基本命令
  • STM32与HAL库开发实战:深入探索ESP8266的多种工作模式
  • 《C++并发编程实战》精读总结:第四章 并发操作的同步
  • Webpack 和 Vite 的主要区别
  • JVM 的不同组成部分分别有什么作用?
  • Navicat SqlServer 设置自增主键
  • 堆的应用(堆排序TopK问题)
  • mysql存储引擎、索引、事务---java
  • 31只北交所主题基金齐刷净值纪录,年内最高涨超80%,已有产品打出“限购牌”
  • 马上评|当众猥亵女演员,没有任何开脱理由
  • 携程:今年第一季度营业收入约138亿元,入境旅游预订同比增长超100%
  • 安徽凤阳通报鼓楼瓦片脱落:2023年曾维修,已成立调查组
  • 学人、学术、学科、学脉:新时代沾溉下的中国西方史学史
  • 证监会副主席李明:近期将出台深化科创板、创业板改革政策措施