超越 mathpix!这个国产doc2x解析能力神了!
在AI大模型时代,RAG(检索增强生成)技术已成为构建智能知识库和问答系统的核心架构。然而,开发者在实际落地过程中往往面临一个关键挑战:如何高效、精准地将多样化格式的文档(如PDF、扫描件、学术论文等)转化为结构化数据,以满足后续向量化、检索与分析的需求。
传统文档解析方案普遍存在精度不足、成本高昂、复杂内容(如公式、图表、跨页表格)处理能力薄弱等问题,严重制约了知识库构建、教育科技等场景的智能化进程。针对这一痛点,Doc2X应运而生——这是一款专为开发者设计的高精度、高性价比文档解析API,致力于通过卓越的技术能力,为智能知识管理、教育数字化转型等场景提供强大的底层支持
Doc2X的应用前景
Doc2X:构建高性能RAG系统
在RAG(检索增强生成)系统的关键流程中,文档解析质量直接影响最终效果。传统方案常因解析不完整导致信息丢失,而Doc2X通过精准结构化解析,为RAG系统提供最优数据基础,帮我们打造更高效智能RAG系统。
我们知道RAG的流程一般如下:第一步,上传文档;第二步,文档解析;第三步,内容入库与向量化;第四步,智能问答与检索。
若我们在文档解析时采用了Doc2x,便可以将各种格式的文档,如PDF、扫描件、图片等,自动解析为对机器友好,便于后续索引、检索、内容理解的结构化结果,如Markdown或HTML,并且Doc2x可以保证公式和图表、表格信息的完整性。而这些将直接影响RAG的知识库的质量,影响后续的检索的精度与召回率,继而影响生成质量。高质量的文档解析结果,确保高质量的知识库,确保高质量的检索结果,确保高质量的生成结果。清晰且结构化的文档结构有助于大模型对上下文的理解,完整的公式和表格信息则可以提升答案的准确性和完整性,避免生成过程中的幻觉与理解偏差。
典型场景
当用户查询"请解释论文中的公式(3)推导过程"时:
传统解析:公式丢失或乱码 → 生成错误结论 Doc2X方案:LaTeX公式精准解析 → 大模型正确关联推导步骤
Doc2X:在教育数字化上的应用
使用Doc2x可以辅助教育领域的数字化转型。
首先,使用Doc2x可以将纸质试卷或PDF电子试卷结构化入库: (1)对试题精准识别和结构化,识别结果将精准包含公式、文本、图表信息等; (2)解析后对结构化结果可以方便录入题库系统。电子化对题库对于后续对智能卷组、学情分析等提供支持。
然后,使用Doc2x可以赋能在线教育:
(1)深度解析教材、课件、习题,便于构建相应的结构化知识图谱
(2)精准识别错题照片,提取题目文本、公式,生成错题解析报告,为后续的错因分析和知识点溯源提供数据基础。
Doc2x 翻译神器
Doc2X 支持翻译到多种语言,并支持中英对照(可以双向跳转),此外还提供“原文”,“译文”,“中英对照”三种格式的导出。重要但是,Doc2X 翻译是全免费的。相信未来随着更多大语言模型可以选择,翻译效果一定会更好。
Doc2x使用案例
笔者日常工作中需要跟进最新研究成果,必然躲不开论文研读。我们一起来看看使用Doc2x以及大模型的效果。主要流程如下:
利用Doc2x 对选中的论文的pdf文件解析 使用大模型对解析结果进行解读
主要用到到库为pdfdeal,它是Doc2x提供的 Python 的封装库:https://github.com/Menghuan1918/pdfdeal ,基于该库我们可以方便地利用代码解析文档。下面是官方示例:
参考该示例我们来开发我们自己的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进行论文解读
这里还需要指出的是Doc2X已经成功集成到多个知名平台,包括但不限于FastGPT,Coze( 扣子)等。其中FastGPT,直接支持Doc2X作为文档解析引擎,而Coze国内版本已支持Doc2X集成。
Doc2X的核心优势
Doc2X在文档解析领域树立了新的技术标杆,其强大的解析能力全面超越传统开源工具与商业化解决方案:
布局上,具备复杂布局处理能力:在包含⼤量公式、图表、表格的复杂文档上,有着解卓越的解析能力,能过准确识别并保持相应结构 表格上,支持完整的跨页表格数据提取能力:自动识别并合并分页表格数据,确保数据完整性。 图片上,具备双重视觉内容解析能力:可以同时提取图片本体,以及图片内嵌文字以及图片的caption 公式上,具备高精度识别和结构转换能力: ⽆论是印刷体还是部分⼿写体公式,都能准确识别,且支持mathjax 渲染,在Word中也能正确显示。 速度上,一个字快:五百⻚的PDF解析仅需 1min。
Doc2X还提供了清晰且易用的API接口,方便大家调用。参考接口文档
https://noedgeai.feishu.cn/wiki/Q8QIw3PT7i4QghkhPoecsmSCnG1
此外还具备超高性价比:每页解析低至0.02元。
写在最后
Doc2X——开发者首选的智能文档解析引擎,正在重塑RAG系统的构建方式。这款专为技术团队打造的API解决方案,凭借其突破性的解析精度、行业领先的公式处理能力,以及极具性价比的定价策略,已成为搭建智能知识库与教育科技平台的首选工具。
在RAG系统开发过程中,Doc2X提供了双重价值:
解决复杂文档的预处理技术瓶颈 显著提升原始数据质量,优化系统整体性能
随着产品矩阵的持续升级和开发者生态的蓬勃发展,Doc2X正在赋能越来越多的技术创新项目。如果想要体验下一代文档解析技术,可以访问 open.noedgeai.com 了解详情。
🏴☠️宝藏级🏴☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递