Nougat - 学术文档PDF解析(LaTeX数学、表格)

文章目录

    • 一、关于 Nougat
    • 二、安装
    • 三、获取PDF的预测
      • 1、CLI
      • 2、API
    • 四、数据集
      • 生成数据集
    • 五、训练
    • 六、评估
    • 七、其它
      • 1、常见问题解答
      • 2、引文
      • 3、致谢
      • 4、许可证


一、关于 Nougat

Nougat (Neural Optical Understanding for Academic Documents)

Nougat是理解LaTeX数学和表格的 学术文档PDF解析器。

  • github : https://github.com/facebookresearch/nougat
  • 主页:https://facebookresearch.github.io/nougat/

二、安装

来自pip:

pip install nougat-ocr

来自存储库:

pip install git+https://github.com/facebookresearch/nougat

注意,在Windows上:如果您想使用GPU,请确保首先安装正确的PyTorch版本。按照这里的说明

如果要从API调用模型或生成数据集,则存在额外的依赖项。通过

pip install "nougat-ocr[api]"``pip install "nougat-ocr[dataset]"

三、获取PDF的预测


1、CLI

获取PDF运行的预测

$ nougat path/to/file.pdf -o output_directory

目录或文件的路径,其中每一行都是PDF的路径,也可以作为位置参数传递

$ nougat path/to/directory -o output_directory

usage: nougat [-h] [--batchsize BATCHSIZE] [--checkpoint CHECKPOINT] [--model MODEL] [--out OUT][--recompute] [--markdown] [--no-skipping] pdf [pdf ...]positional arguments:pdf                   PDF(s) to process.options:-h, --help            show this help message and exit--batchsize BATCHSIZE, -b BATCHSIZEBatch size to use.--checkpoint CHECKPOINT, -c CHECKPOINTPath to checkpoint directory.--model MODEL_TAG, -m MODEL_TAGModel tag to use.--out OUT, -o OUT     Output directory.--recompute           Recompute already computed PDF, discarding previous predictions.--full-precision      Use float32 instead of bfloat16. Can speed up CPU conversion for some setups.--no-markdown         Do not add postprocessing step for markdown compatibility.--markdown            Add postprocessing step for markdown compatibility (default).--no-skipping         Don't apply failure detection heuristic.--pages PAGES, -p PAGESProvide page numbers like '1-4,7' for pages 1 through 4 and page 7. Only works for single PDFs.

默认模型标记为0.1.0-small。如果要使用基本模型,请使用0.1.0-base

$ nougat path/to/file.pdf -o output_directory -m 0.1.0-base

在输出目录中,每个PDF都将保存为.mmd文件,轻量级置标语言,主要与MathpixMarkdown兼容(我们使用LaTeX表)。

注意:在某些设备上,故障检测启发式无法正常工作。如果您遇到很多[MISSING_PAGE]响应,请尝试使用--no-skipping标志运行。相关:#11,#67


2、API

使用app.py启动API的额外依赖项。调用

$ nougat_api

通过向http://127.0.0.1:8503/predict/发出POST请求来获得PDF文件的预测。它还接受参数startstop以限制选择页码的计算(包括边界)。

响应是带有文档降价文本的字符串。

curl -X 'POST' \'http://127.0.0.1:8503/predict/' \-H 'accept: application/json' \-H 'Content-Type: multipart/form-data' \-F 'file=@<PDFFILE.pdf>;type=application/pdf'

要将转换限制为第1页到第5页,请使用请求URL中的start/stop参数:http://127.0.0.1:8503/predict/?start=1&stop=5


四、数据集

生成数据集

要生成您需要的数据集

  1. 包含PDF的目录
  2. 包含具有相同文件夹结构的.html文件(LaTeXML处理的.tex文件)的目录
  3. 二进制文件pdffigures2和相应的环境变量export PDFFIGURES_PATH="/path/to/binary.jar"

然后运行

python -m nougat.dataset.split_htmls_to_pages --html path/html/root --pdfs path/pdf/root --out path/paired/output --figure path/pdffigures/outputs

其他参数包括

参数描述
--recompute所有拆分
--markdown MARKDOWNMarkdown输出目录
--workers WORKERS使用多少进程
--dpi DPI页面将保存在什么分辨率
--timeout TIMEOUT最大每张纸的时间(以秒为单位)
--tesseractTesseract每页的OCR预测

最后创建一个jsonl文件,其中包含所有图像路径、markdown文本和元信息。

python -m nougat.dataset.create_index --dir path/paired/output --out index.jsonl

对于每个jsonl文件,您还需要生成一个查找映射以加快数据加载速度:

python -m nougat.dataset.gen_seek file.jsonl

生成的目录结构如下所示:

root/
├── images
├── train.jsonl
├── train.seek.map
├── test.jsonl
├── test.seek.map
├── validation.jsonl
└── validation.seek.map

请注意,path/paired/output中的.mmd.json文件(此处为images)不再需要。 这对于通过将文件量减半推送到S3存储桶很有用。


五、训练

要训练或微调Nougat模型,请运行

python train.py --config config/train_nougat.yaml

六、评估

运行

python test.py --checkpoint path/to/checkpoint --dataset path/to/test.jsonl --save_path path/to/results.json

要获取不同文本模式的结果,请运行

python -m nougat.metrics path/to/results.json

七、其它

1、常见问题解答

  • 为什么我只得到[MISSING_PAGE]
    Nougat 接受了在arxiv和PMC上发现的科学论文的培训。你正在处理的文件与此相似吗? 文件用什么语言?Nougat 最适合英文文件,其他拉丁语言可能也可以。中文、俄文、日文等将不起作用。 如果满足这些要求,可能是因为在CPU或较旧的GPU上计算时故障检测中的误报(#11)。现在尝试传递--no-skipping标志。

  • 我可以从哪里下载模型检查点。

    它们在这里上传到GitHub的发布部分,您也可以在程序第一次执行期间下载它们通过传递选择首选的首选模型--model 0.1.0-{base,small}


2、引文

@misc{blecher2023nougat,title={Nougat: Neural Optical Understanding for Academic Documents}, author={Lukas Blecher and Guillem Cucurull and Thomas Scialom and Robert Stojnic},year={2023},eprint={2308.13418},archivePrefix={arXiv},primaryClass={cs.LG}
}

3、致谢

此存储库建立在Donut存储库之上。


4、许可证

Nougat 代码库在麻省理工学院获得许可。

Nougat 模型重量在CC-BY-NC下获得许可。


2024-07-21(日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dockerfile相关命令

Dockerfile Dockerfile 是一个用来构建Docker镜像的文本文件&#xff0c;包含了一系列构建镜像所需的指令和参数。 指令详解 Dockerfile 指令说明FROM指定基础镜像&#xff0c;用于后续的指令构建&#xff0c;必须为第一个命令MAINTAINER指定Dockerfile的作者/维护者。&…

CentOS软件安装与vim使用操作

目录 CentOS软件安装 软件生态的概念 CentOS软件安装 CentOS软件卸载 CentOS查看软件包 rz和sz命令 vim多模式文本编辑器 vim 的使用 命令模式 输入模式 底线命令模式 vim 按键说明 第一部分&#xff1a;一般模式可用的光标移动、复制粘贴、搜索替换等 光标移动 …

JUC并发编程01-基础概念

概念 进程 进程可以视为程序的一个实例&#xff0c;进程就是用来加载指令、管理内存、管理I0 线程 一个进程内可以有多个线程&#xff0c;一个线程就是一个指令流。 在Java中&#xff0c;线程作为最小调度单位&#xff0c;进程作为资源分配的最小单位&#xff0c;可以说进程…

Mysql数据库第二次作业

(1)显示所有职工的基本信息。 mysql> select * from t_worker; (2)查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 mysql> select distinct department_id from t_worker; (3)求出所有职工的人数。 mysql> select count(1) from t_worker; (4)列…

Figma 中文版指南:获取和安装汉化插件

Figma是一种主流的在线团队合作设计工具&#xff0c;也是一种基于 Web 端的设计工具。在当今的设计时代&#xff0c;Figma 的使用满足了每个人的设计需求&#xff0c;不仅可以实现在线编辑&#xff0c;还可以方便日常管理&#xff0c;有效提高工作效率。然而&#xff0c;相信很…

分页查询与分页条件查询

--------------- 无PageHelper插件分页查询 1.创建PageBean实体类 Data NoArgsConstructor AllArgsConstructor public class PageBean<T> {private Long total;//总条数private List<T> items;//当前页数据集合 }类型安全性 泛型&#xff1a;提供了编译时的类型…

【Apache Doris】周FAQ集锦:第 15 期

【Apache Doris】周FAQ集锦&#xff1a;第 15 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…

JMeter:BeanShell到JSR223迁移中的注意事项

前言 在之前的文章JMeter&#xff1a;BeanShell向JSR223迁移过程遭遇的java标准库不可用问题-如何切换JDK版本中引用了一段使用BeanShell对入参进行加密的脚本&#xff0c;迁移到JSR223&#xff0c;虽然更换JDK后编译通过&#xff0c;看似也可以执行了&#xff0c;但是其实那段…

windows USB 设备驱动开发-开发Type C接口的驱动程序(二)

编写 USB Type C 连接器驱动程序 在以下情况下&#xff0c;需要编写 USB Type-C 连接器驱动程序&#xff1a; 如果 USB Type-C 硬件能够处理电源输送 (PD) 状态机。 否则&#xff0c;请考虑编写 USB Type C 端口控制器驱动程序&#xff1b; 如果硬件没有嵌入式控制器。 否则&…

(10)深入理解pandas的核心数据结构:DataFrame高效数据清洗技巧

目录 前言1. DataFrame数据清洗1.1 处理缺失值&#xff08;NaNs&#xff09;1.1.1 数据准备1.1.2 读取数据1.1.3 查找具有 null 值或缺失值的行和列1.1.4 计算每列缺失值的总数1.1.5 删除包含 null 值或缺失值的行1.1.6 利用 .fillna&#xff08;&#xff09; 方法用Portfolio …

Python本地安装whl文件详解与高级pip命令技巧

有些情况我们pip一下包的时候会报错&#xff0c;可能因为延时或许其他不兼容的情况&#xff0c;这时候我们可以通过去网上下载该包的原文件&#xff0c;进行本地物理pip &#xff0c;在安装网上下载的whl之前&#xff0c;先明白不同后缀的差异&#xff1b;whl下载网址&#xff…

Linux 下部署 syncthing 中继服务器

来自&#x1f96c;&#x1f436;程序员 Truraly | 田园 的博客&#xff0c;最新文章首发于&#xff1a;田园幻想乡 | 原文链接 | github &#xff08;欢迎关注&#xff09; 文章目录 安装apt 安装(Ubuntu/Debian) syncthing 配置发现服务器和中继服务器 Syncthing 是一个连续的…

解答word图标变白

把WPS卸载了之后就变成白色了&#xff0c;然后在注册表中把word的地址改成office word的地址之后图标变成这样了&#xff0c;怎么办 1.winR打开命令提示符 2.输入regedit&#xff0c;打开注册表编辑器 3.找到下面这个路径 计算机\HKEY_CLASSES_ROOT\Word.Document.8\Defaul…

【C#】已知有三个坐标点:P0、P1、P2,当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致,该如何计算P3、P4?

问题描述 已知有三个坐标点&#xff1a;P0、P1、P2&#xff0c;当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致&#xff0c;该如何计算P3、P4&#xff1f; 解决办法 思路一&#xff1a;斜率及点斜式方程 # 示例坐标 x0, y0 1, 1 # P0坐标 x1, y1 4, 4 # …

跟ChatGPT学习go语言--time.Sleep 方法 单位是什么

在 Go 语言中&#xff0c;time.Sleep 方法用于让当前的 Goroutine 休眠一段时间。time.Sleep 方法的参数是一个 time.Duration 类型&#xff0c;表示休眠的时间长度。time.Duration 是一个以纳秒为单位的整数类型。 使用示例 以下是一个简单的示例&#xff0c;展示如何使用 tim…

自适应键盘,自带隐藏键盘的输入框(UITextField)

引言 在iOS开发中&#xff0c;输入框占据着举足轻重的地位。与安卓不同&#xff0c;iOS输入框经常面临键盘遮挡的问题&#xff0c;或者无法方便地取消键盘。为了解决这些问题&#xff0c;有许多针对iOS键盘管理的库&#xff0c;如IQKeyboardManager、TPKeyboardAvoiding和Keyb…

一个PCIe设备可以既是主设备也是从设备吗?主设备与根节点的关系?

PCIe设备也可以既是主设备&#xff08;Master&#xff09;又是从设备&#xff08;Slave&#xff09;&#xff0c;这是因为PCIe总线的设计允许设备在不同的事务中扮演不同的角色&#xff0c;具体取决于设备的功能和总线控制器的支持。以下是几个主要的原因&#xff1a; 灵活性和…

分库分表 [ 技术 ] 指南 ✨

目录 ✨探索 技术 分库分表✨ 数据库分库分表指南 一、什么是分库分表 二、分库分表策略 三、分库分表的实现 四、分库分表的常见问题及解决方案 五、总结 相关面试题目 1. 解释什么是数据库分库分表&#xff0c;以及它的主要目的是什么&#xff1f; 2. 描述垂直分库…

STM32学习(1)--STM32介绍

STM32介绍 1.STM32简介2.ARM3.STM32F103C8T64.外设5.命名规则6.系统结构7.引脚定义8.启动配置9.最小系统电路10.新建工程步骤11.工程架构 课程知识及代码来源均来自b站 江协科技&#xff0c;下学期即将做毕设&#xff0c;需要用到STM32单片机&#xff0c;在这个假期我将持续学…

Python热门面试题(六)

请解释Python中的map()函数和filter()函数及其应用场景 在Python中&#xff0c;map()函数和filter()函数是两个非常有用的内置高阶函数&#xff0c;它们允许你以函数式编程的方式处理可迭代对象&#xff08;如列表、元组等&#xff09;。下面分别解释这两个函数的工作原理及其…