数据STUDIO

超越 mathpix!这个国产doc2x解析能力神了!

Image

Image

在AI大模型时代,RAG(检索增强生成)技术已成为构建智能知识库和问答系统的核心架构。然而,开发者在实际落地过程中往往面临一个关键挑战:如何高效、精准地将多样化格式的文档(如PDF、扫描件、学术论文等)转化为结构化数据,以满足后续向量化、检索与分析的需求。

传统文档解析方案普遍存在精度不足、成本高昂、复杂内容(如公式、图表、跨页表格)处理能力薄弱等问题,严重制约了知识库构建、教育科技等场景的智能化进程。针对这一痛点,Doc2X应运而生——这是一款专为开发者设计的高精度、高性价比文档解析API,致力于通过卓越的技术能力,为智能知识管理、教育数字化转型等场景提供强大的底层支持

Doc2X的应用前景

Doc2X:构建高性能RAG系统

在RAG(检索增强生成)系统的关键流程中,文档解析质量直接影响最终效果。传统方案常因解析不完整导致信息丢失,而Doc2X通过精准结构化解析,为RAG系统提供最优数据基础,帮我们打造更高效智能RAG系统。

我们知道RAG的流程一般如下:第一步,上传文档;第二步,文档解析;第三步,内容入库与向量化;第四步,智能问答与检索。

若我们在文档解析时采用了Doc2x,便可以将各种格式的文档,如PDF、扫描件、图片等,自动解析为对机器友好,便于后续索引、检索、内容理解的结构化结果,如Markdown或HTML,并且Doc2x可以保证公式和图表、表格信息的完整性。而这些将直接影响RAG的知识库的质量,影响后续的检索的精度与召回率,继而影响生成质量。高质量的文档解析结果,确保高质量的知识库,确保高质量的检索结果,确保高质量的生成结果。清晰且结构化的文档结构有助于大模型对上下文的理解,完整的公式和表格信息则可以提升答案的准确性和完整性,避免生成过程中的幻觉与理解偏差。

典型场景

当用户查询"请解释论文中的公式(3)推导过程"时:

  • 传统解析:公式丢失或乱码 → 生成错误结论
  • Doc2X方案:LaTeX公式精准解析 → 大模型正确关联推导步骤
Image

Image

Image

Doc2X:在教育数字化上的应用

使用Doc2x可以辅助教育领域的数字化转型。

首先,使用Doc2x可以将纸质试卷或PDF电子试卷结构化入库: (1)对试题精准识别和结构化,识别结果将精准包含公式、文本、图表信息等;  (2)解析后对结构化结果可以方便录入题库系统。电子化对题库对于后续对智能卷组、学情分析等提供支持。

然后,使用Doc2x可以赋能在线教育:

(1)深度解析教材、课件、习题,便于构建相应的结构化知识图谱
(2)精准识别错题照片,提取题目文本、公式,生成错题解析报告,为后续的错因分析和知识点溯源提供数据基础。

Doc2x 翻译神器

Doc2X 支持翻译到多种语言,并支持中英对照(可以双向跳转),此外还提供“原文”,“译文”,“中英对照”三种格式的导出。重要但是,Doc2X 翻译是全免费的。相信未来随着更多大语言模型可以选择,翻译效果一定会更好。

Image

Doc2x使用案例

笔者日常工作中需要跟进最新研究成果,必然躲不开论文研读。我们一起来看看使用Doc2x以及大模型的效果。主要流程如下:

  • 利用Doc2x 对选中的论文的pdf文件解析
  • 使用大模型对解析结果进行解读

主要用到到库为pdfdeal,它是Doc2x提供的 Python 的封装库:https://github.com/Menghuan1918/pdfdeal ,基于该库我们可以方便地利用代码解析文档。下面是官方示例:

Image

参考该示例我们来开发我们自己的pdf解析神器。

Doc2X论文解析
from pdfdeal import Doc2X
from pathlib import Path
from typing import Union, List, Tuple, Optional
import os
import zipfile
import shutil

classMyPDFParserDemo:
"""PDF解析器类,用于将PDF文件转换为Markdown内容"""

def__init__(self, api_key: str, debug: bool = True, thread: int = 5, full_speed: bool = True):
"""
        初始化PDF解析器

        Args:
            api_key: Doc2X API密钥
            debug: 是否开启调试模式
            thread: 线程数
            full_speed: 是否开启全速模式
        """

        self.client = Doc2X(
            apikey=api_key,
            debug=debug,
            thread=thread,
            full_speed=full_speed
        )

defparse_pdf_to_markdown(self, 
                             pdf_path: str,
                             output_path: str = "./Output",
                             output_format: str = "md",
                             ocr: bool = True,
                             convert: bool = False,
                             )
 -> Tuple[Union[str, List[str]], List[dict], bool]:

"""
        将PDF文件解析为Markdown内容

        Args:
            pdf_path: PDF文件路径
            output_path: 输出目录路径
            output_format: 输出格式,支持 'md', 'md_dollar', 'text', 'texts', 'detailed'
            ocr: 是否使用OCR
            convert: 是否将 [ 和 [[ 转换为 $ 和 $$

        Returns:
            成功转换的内容或文件路径、失败信息、是否有错误的元组
        """

# 检查PDF文件是否存在
        ifnot os.path.exists(pdf_path):
raise FileNotFoundError(f"PDF文件不存在: {pdf_path}")

# 确保输出目录存在
        Path(output_path).mkdir(parents=True, exist_ok=True)

# 调用Doc2X进行转换
        success, failed, flag = self.client.pdf2file(
            pdf_file=pdf_path,
            output_path=output_path,
            output_format=output_format,
            ocr=ocr,
            convert=convert,
        )

return success, failed, flag

defparse_pdf_to_text(self, pdf_path: str) -> str:
"""
        将PDF文件解析为纯文本字符串

        Args:
            pdf_path: PDF文件路径

        Returns:
            解析后的文本内容
        """

        success, failed, flag = self.parse_pdf_to_markdown(
            pdf_path=pdf_path,
            output_format="text"
        )

if flag:  # 有错误
raise Exception(f"PDF解析失败: {failed}")

return success

defparse_pdf_to_pages(self, pdf_path: str) -> List[str]:
"""
        将PDF文件按页解析为文本列表

        Args:
            pdf_path: PDF文件路径

        Returns:
            按页分割的文本列表
        """

        success, failed, flag = self.parse_pdf_to_markdown(
            pdf_path=pdf_path,
            output_format="texts"
        )

if flag:  # 有错误
raise Exception(f"PDF解析失败: {failed}")

return success

defparse_pdf_to_markdown_file(self, 
                                  pdf_path: str,
                                  output_path: str = "./Output",
                                  custom_filename: Optional[str] = None)
 -> str:

"""
        将PDF文件转换为Markdown文件并保存

        Args:
            pdf_path: PDF文件路径
            output_path: 输出目录路径
            custom_filename: 自定义输出文件名

        Returns:
            生成的Markdown文件路径
        """

        output_names = None
if custom_filename:
            output_names = [custom_filename]

        success, failed, flag = self.client.pdf2file(
            pdf_file=pdf_path,
            output_names=output_names,
            output_path=output_path,
            output_format="md",
            ocr=True
        )

if flag:  # 有错误
raise Exception(f"PDF转换失败: {failed}")

return success[0] if isinstance(success, list) else success


defget_markdown_content(self, pdf_path: str) -> str:
"""
        直接获取PDF的Markdown内容(不保存文件)

        Args:
            pdf_path: PDF文件路径

        Returns:
            Markdown格式的文本内容
        """

        success, failed, flag = self.parse_pdf_to_markdown(
            pdf_path=pdf_path,
            output_format="text",
            convert=True# 转换数学公式格式
        )

if flag:  # 有错误
raise Exception(f"PDF解析失败: {failed}")

return success


# 使用示例
if __name__ == "__main__":
# 初始化解析器(替换为您的API密钥)
    parser = MyPDFParserDemo(api_key="myapikey")
# 示例: 解析PDF并自动解压
    pdf_path = "papername.pdf"

if os.path.exists(pdf_path):
try:
            print("\n正在解析PDF并自动解压...")
            success, failed, flag= parser.parse_pdf_to_markdown(
                pdf_path=pdf_path,
                output_path="./auto_extract_output",
                output_format="md"
            )

            ifnot flag:
                print(f"PDF解析成功!")
                print("解析结果:",suceess)
else:
                print(f"PDF解析失败: {failed}")

except Exception as e:
            print(f"解析PDF时出错: {e}")

在解析完论文后,我们在调用deepseek进行论文解读

Image

这里还需要指出的是Doc2X已经成功集成到多个知名平台,包括但不限于FastGPT,Coze( 扣子)等。其中FastGPT,直接支持Doc2X作为文档解析引擎,而Coze国内版本已支持Doc2X集成。

Image

Doc2X的核心优势

Doc2X在文档解析领域树立了新的技术标杆,其强大的解析能力全面超越传统开源工具与商业化解决方案:

  • 布局上,具备复杂布局处理能力:在包含⼤量公式、图表、表格的复杂文档上,有着解卓越的解析能力,能过准确识别并保持相应结构
  • 表格上,支持完整的跨页表格数据提取能力:自动识别并合并分页表格数据,确保数据完整性。
  • 图片上,具备双重视觉内容解析能力:可以同时提取图片本体,以及图片内嵌文字以及图片的caption
  • 公式上,具备高精度识别和结构转换能力: ⽆论是印刷体还是部分⼿写体公式,都能准确识别,且支持mathjax 渲染,在Word中也能正确显示。
  • 速度上,一个字快:五百⻚的PDF解析仅需 1min。

Doc2X还提供了清晰且易用的API接口,方便大家调用。参考接口文档

https://noedgeai.feishu.cn/wiki/Q8QIw3PT7i4QghkhPoecsmSCnG1

Image

此外还具备超高性价比:每页解析低至0.02元。

Image

写在最后

Doc2X——开发者首选的智能文档解析引擎,正在重塑RAG系统的构建方式。这款专为技术团队打造的API解决方案,凭借其突破性的解析精度、行业领先的公式处理能力,以及极具性价比的定价策略,已成为搭建智能知识库与教育科技平台的首选工具。

在RAG系统开发过程中,Doc2X提供了双重价值:

  1. 解决复杂文档的预处理技术瓶颈
  2. 显著提升原始数据质量,优化系统整体性能

随着产品矩阵的持续升级和开发者生态的蓬勃发展,Doc2X正在赋能越来越多的技术创新项目。如果想要体验下一代文档解析技术,可以访问 open.noedgeai.com 了解详情。

🏴‍☠️宝藏级🏴‍☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫等,从入门到进阶!

长按👇关注- 数据STUDIO -设为星标,干货速递ImageImage