使用 Mistral OCR、Langchain 和 Gradio 从 PDF 和图像创建数据集

社区文章 发布于 2025 年 5 月 16 日

在数据驱动的 AI 时代,将 PDF 和图像等非结构化文档转换为结构化数据集是一项颠覆性变革。无论是构建知识库、训练语言模型还是分析扫描文档,光学字符识别 (OCR) 与智能文本处理相结合都可以解锁有价值的见解。在这篇文章中,我们将探索一个强大的 Gradio 应用程序,它自动化了这一过程,使用 Mistral AI 进行 OCR,LangChain 进行文本分块,以及 Hugging Face 进行数据集存储——所有这些都包装在一个直观的 Gradio 界面中。让我们深入了解这个工具的工作原理、它的用途以及如何使用它来创建自己的数据集。

Gradio 应用程序的功能是什么?

该应用程序作为 Gradio 应用程序构建,简化了将多个 PDF 或图像文件转换为结构化数据集的过程。以下是高级工作流程:

  1. 上传文件:通过网页界面上传一个或多个 PDF 或图像文件(PNG、JPG、JPEG、WEBP、BMP)。
  2. 执行 OCR:使用 Mistral AI 的 OCR API 提取文本和图像,生成包含嵌入式 Base64 编码图像的 Markdown。
  3. 分块文本:根据标题或字符限制将 Markdown 分成可管理的小块,并在元数据中保留图像。
  4. 保存到 Hugging Face:将分块作为数据集存储到 Hugging Face 仓库中,其中包含文本、元数据和源文件信息。

结果如何?一个干净、结构化的数据集,可用于机器学习、搜索或存档目的,通过简单的网页界面即可访问。

为什么这很重要

非结构化文档无处不在——想想扫描的书籍、会议记录或档案记录。从中提取可用数据通常很繁琐,需要手动转录或复杂的预处理。此应用程序通过以下方式解决了这个问题:

  • 自动化 OCR:Mistral AI 的 OCR 处理文本和图像,即使是复杂布局也能应对。
  • 结构化数据:LangChain 的文本分割器创建逻辑块,使数据更易于分析或输入模型。
  • 启用协作:Hugging Face 数据集可共享、版本化,并可用于 AI 工作流。
  • 简化交互:Gradio 界面使非编码人员也能轻松访问该工具,并提供自定义分块和输出的选项。

用例包括为大型语言模型 (LLM) 创建训练数据、构建可搜索的文档存档或准备用于研究的数据集。

工作原理:技术细分

名为 app.py 的脚本是一个模块化、健壮的应用程序。让我们分解其关键组件以及它们如何协同工作。

1. Gradio 接口

Gradio 提供了一个用户友好的网页界面,用户可以在其中:

  • 上传多个文件。
  • 设置分块选项(例如,最大分块大小、重叠、是否剥离标题)。
  • 指定 Hugging Face 仓库和令牌。
  • 查看处理状态和数据集链接。

一个显著的特点是修复了 Gradio 的一个 bug,其中一个修补函数处理多文件上传的模式解析,确保与最新的 Gradio 版本兼容。

2. Mistral AI OCR

Mistral AI 的 OCR API 处理 PDF 和图像,将文本提取为 Markdown,将图像提取为 Base64 编码的数据 URI。该脚本支持:

  • PDF:上传到 Mistral 的服务器,处理后删除。
  • 图像:编码为 Base64 并直接发送到 OCR API。
  • 错误处理:健全的检查确保清晰地报告无效文件或 API 故障。

3. 使用 LangChain 进行文本分块

提取的 Markdown 使用 LangChain 的 MarkdownHeaderTextSplitterRecursiveCharacterTextSplitter 分割成块。

  • 基于标题的分割:根据 Markdown 标题(例如,###)分割文本,并可选择从内容中剥离标题(将其存储在元数据中)。
  • 基于字符的分割:进一步将块分割成指定大小(例如,1000 个字符),并保留上下文重叠。
  • 图像跟踪:提取图像,替换为引用 ID,并作为 Base64 URI 存储在块元数据中。

这种双重方法确保了灵活性——对于结构化文档使用仅基于标题的分割,对于密集文本使用基于字符的分割。

4. 使用 Hugging Face 创建数据集

分块被组织成一个数据集,包含以下列:

  • chunk_id:唯一标识符(例如,filename_chunk_1)。
  • text:分块的文本内容。
  • metadata:标题、图像 Base64 URI 和其他详细信息。
  • source_filename:原始文件名。

数据集使用 Hugging Face 令牌进行身份验证,推送到 Hugging Face 仓库中。如果仓库不存在,则会自动创建。

代码亮点

以下是主要处理函数的一些亮点:

def process_file_and_save(file_objs, chunk_size, chunk_overlap, strip_headers, hf_token, repo_name):
    all_data = {"chunk_id": [], "text": [], "metadata": [], "source_filename": []}
    for file_obj in file_objs:
        markdown, _, img_map = perform_ocr_file(file_obj)
        chunks = chunk_markdown(markdown, chunk_size, chunk_overlap, strip_headers)
        all_data["chunk_id"].extend([f"{file_obj.orig_name}_chunk_{i}" for i in range(len(chunks))])
        all_data["text"].extend([chunk.page_content for chunk in chunks])
        all_data["metadata"].extend([chunk.metadata for chunk in chunks])
        all_data["source_filename"].extend([file_obj.orig_name] * len(chunks))
    dataset = Dataset.from_dict(all_data)
    dataset.push_to_hub(repo_name, token=hf_token)
    return f"Success! Dataset saved to: https://huggingface.co/datasets/{repo_name}"

此函数协调管道,处理错误并汇总多个文件的结果。

提示

  • 复制空间:单击此链接以复制空间
  • 小规模测试:从少量文件开始,验证设置。
  • 检查日志:脚本会记录详细信息以帮助故障排除。

自定义想法

该脚本是模块化的,因此您可以对其进行扩展:

  • 添加语义分块:使用 NLP 模型按含义分割文本。
  • 支持更多格式:将 OCR 扩展到处理 DOCX 或扫描的 TIFF 文件。
  • 实时进度:在处理过程中将更新流式传输到 Gradio 界面。
  • 本地存储:在上传之前将块保存到本地数据库。

结论

此应用程序是一个强大的工具,适用于任何希望将 PDF 和图像转换为结构化、AI 就绪数据集的人。通过结合 Mistral AI 的 OCR、LangChain 的文本处理和 Hugging Face 的数据集托管,它将复杂的工作流简化为几次点击。无论您是研究人员、数据科学家还是业余爱好者,此应用程序都可以节省时间,并为您的数据集创建项目或实验开启新的可能性。

试试看,然后在评论中告诉我 Ricci 如何——祝您数据集创建愉快!

社区

注册登录以发表评论