RAG evaluation

解决mineru不支持多级标题解析的问题。

因为我们之前讲过mineru他默认是不支持多级标题的,所以文档转换成markdown之后,就都会变成1级标题。 虽然官方给出过一个解决方案:https://github.com/opendatalab/MinerU/discussi…

TL;DR

因为我们之前讲过mineru他默认是不支持多级标题的,所以文档转换成markdown之后,就都会变成1级标题。 虽然官方给出过一个解决方案:https://github.com/opendatalab/MinerU/discussi…

因为我们之前讲过mineru他默认是不支持多级标题的,所以文档转换成markdown之后,就都会变成1级标题。 虽然官方给出过一个解决方案:https://github.com/opendatalab/MinerU/discussions/3135 但是我实测下来他效果并不好,因为他是通过模型来判断标题的字符大小来决定标题层级的,效果并不好。我实测之后他没有都识别成1级标题了,但是都给我识别成2级标题了。。。。 所以我们需要自己想办法解决。我们遇到过类似的情况,解决办法给大家分享下。 1、如果pdf中原来带目录的话,我们可以基于他的目录做解析 2、如果pdf中不带目录,但是带书签(有些文档把书签当目录用),那么我可就可以基于书签做解析。 比如我们示例中用的智界R7的用户手册,他就是后面这种,文档打开是这样的: 可以看到他的书签就和他的标题几乎是对应的,并且也有层级结构。所以我们没有借助它来做。 首先,我们需要先导出一份书签,实测wps就可以,但是需要windows版才行,mac不支持。 (下图来自官方文档) 按照如图操作,导出标签。如下: 这里面有标题结构。 然后通过代码脚本,处理我们使用mineru基于pdf处理过的md文件:

#!/usr/bin/env python3
## -*- coding: utf-8 -*-
""
基于 XML 书签定义的目录结构,处理 Markdown 文件中的一级标题:

规则:
1.
2.

     例如 INDENT

3.
""

from

import
import
import
import
import
from
from


def

    解析 XML 书签文件,返回

    若同一标题在书签中以不同 INDENT 多次出现,则选取出现次数最多的 INDENT;
    若并列,则取最小(即更靠近顶层)的等级。

    tree
    root


    name_indents


        name
        indent_str


            indent


        name_indents

    title_level

        counter

        most_common_count
        candidates
        title_level


## 匹配一级标题:以 "# " 开头,且不是 "## "、"### " 等
H1_PATTERN


def
    md_path
    title_level
    output_path
)

    处理 Markdown 文件,按规则修改一级标题。

    返回


        lines

    total_h1
    matched
    demoted

    new_lines
    in_code_block
    code_fence_re


            in_code_block
            new_lines


            new_lines


            total_h1
            title

                level

                level
                new_line
                new_lines
                matched


                new_lines
                demoted

            new_lines


        f


def
    parser
        description

    default_dir
    parser

        default


    parser

        default
            default_dir


    parser

        default


    args


    out_path

        base
        out_path


    title_level


    total_h1


if

运行后,得到一个新的md文件,其中的标题就是有多级标题的了: https://nfturbo-file.oss-cn-hangzhou.aliyuncs.com/llm/MinerU_markdown_r7-product-manual-20250123_2028781865782407168.processed.md 效果如下:

版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。