使用

脚本

  1. github下载源码。
  2. 安装python3
  3. 安装必要的python包

pip install numpy
pip install pandas
pip install PyMuPDF
pip install opencv
pip install easyocr
easyocr模型可以不下载,在源码easy文件夹中有。

按照PyTorch官网的说明,下载PyTorch。

  1. 运行:ATMA.py

windows程序

百度网盘下载。文件夹下有两个文件,选择一个下载。

  • atma_64_F.zip: pyinstaller打包的单文件,启动慢,但是解压后文件相对较小。
  • atma_64_D.zip: 启动比较快,但是文件夹大。找到文件夹下ATMA.exe打开即可使用。

基本功能

  1. 编辑书签

     1.1 粘贴网上复制而来的目录文本:
    (1) 点击菜单栏"自动修改",会自动修改缩进(如果文字中含有"章节"等字眼,或者含有"1.2.3"这样的序数的话),
    自动删去不必要的空字符,标点……
    (2) 点击菜单"跳转页码",修改跳转页码,
    (3) 手动检查修改一些瑕疵,然后选择pdf,导入书签。
    (4)图中的罗马数字不能识别为页码,已修复。

    1.2 修改PDF中的书签。导出pdf书签……修改……导入
  1. 提取PDF目录页的的文本,形成书签

     速度快。
    效果如下图。
    (1) 第一行的是自动插入的。
    (2) 提取目录时脚本会尝试自动删除页眉页脚等无用的文字。但这些文字跨越多行的话,不能自动删除。
    (3) 总体而言,如果PDF是文字版的,且其中的文字原本就没有错误(很多PDF中的文字是OCR的),
    那么效果还可以,不需要多少人工编辑就可以导入PDF。

  1. OCR识别PDF目录页面文本:

     缺点是速度慢。如果PDF清晰的话,基本没什么错字。
    效果如下图:
    (1) 识别前可以设置页码偏移。这样就会将目录页码根据这个偏移量而修改(一般是增加)。
    (2) 一个比较普遍的问题就是,页码数字比较小(只有个位数)的话,因为文字框比较小,
    很有可能会被OCR引擎忽略而不识别。

            (3) 如果目录分两栏、三栏,一定要在参数里做相应设置。这样会在识别提前将图片裁分。
(4) 下图OCR输出的结果,书签缩进有错误。可以点击"自动修改",自动修改缩进。

界面

  1. 标题

     没有选择pdf的情况下,显示"ATMA"。如果选择了PDF,显示PDF的文件名+ATMA
  2. 菜单

     2.1 书签:打开、保存、检查、自动修改文本文件
    
         2.1.1 新建
    2.1.2 打开
    2.1.3 保存
    2.1.4 检查
    导入书签前可以点击"检查",检查书签格式是否有错误。正确的(可以导入)书签至少满足下面的要求:
    (1) 每一条书签(每一行)的缩进不比上一条书签的缩进大2个层级。
    (2) 每一条书签都有三个数据(两个英文分号)。
    (3) 每条书签的跳转页码不大于PDF的页面数。
    检查过后会在软件下方显示有错误的行的行号。
    2.1.5 自动修改
    (1) 如果书签文本中有"章节",序号(如”1.2“)等字眼,会自动修改数据的缩进。
    (2) 提取每行最后的数字作为书签跳转页码。
    (3) 格式化每一行。如果没有跳转页码,将跳转页码设为0。
    2.1.6 自动修改(保持缩进)
    和上一个菜单作用类似,但是不会修改缩进。 2.2 PDF:选择操作的PDF,导入导出书签,从PDF页面中中获取书签文本 2.2.1 选择PDF
    选择操作的PDF文件。 2.2.2 增量保存
    将书签直接保存到原PDF中。(类似于一般理解的save,覆盖保存)但是,这需要PDF支持。
    如果PDF不支持增量保存(增量保存不成功),就选择下方的"另存为"。 2.2.3 另存为
    将书签导入PDF中,然后将PDF保存为另一个文件。 2.3.4 导出书签
    将PDF中的书签导出。 2.3.5 读取目录
    如果PDF是文字版的PDF,可以尝试通过读取PDF目录页面中文字,形成书签。 2.3.6 OCR目录
    如果PDF是图片版的,选择这个。相比上个选项,OCR速度会比较慢。 2.3 编辑
    2.3.1 正则替换
    菜单栏下面的"替换"按钮是不支持正则的。如果想要使用正则替换,
    在下方输入框输入搜索的文字和要替换的文字,然后点击该菜单选项。
  3. 参数输入框

     输入参数,然后点击确定。
    "读取目录","OCR目录"需要一些参数。这些参数在这里输入,输入后点击确定。
    3.1 开始页:目录页面开始的页码
    3.2 终止页:目录页面终止的页面。如果终止页是"0",表示只读取"开始页"的那一页。默认值是0.
    3.3 偏移量:目录中页码数字与实际要跳转的页码直接的差值。
    3.4 分栏数:目录页面分栏的数目。OCR的时候需要设置这个参数。默认值是1,即不分栏(只有一栏)。
  4. 查找、替换框。

     不支持正则。查找、替换的结果会高亮。
    要使用正则替换,先在这里输入好文字,然后点击菜单栏里的"正则替换"。
  5. 文本框

     输入Tab会转换成四个空格。
    不稳定,不要用来编辑其他文件。
  6. 状态栏

     显示一些操作相关的结果
  7. 行号

PDF书签的编辑器,基于(python、Tkinter)的更多相关文章

  1. 基于python tkinter的课堂点名小程序

    import datetime import json import os import random import tkinter as tk import openpyxl # 花名册文件名很多人 ...

  2. 基于python tkinter的点名小程序

    import datetimeimport jsonimport osimport randomimport tkinter as tkimport openpyxl # 花名册文件名excel_fi ...

  3. 基于Python的WEB接口开发与自动化测试 pdf(内含书签)

    基于Python的WEB接口开发与自动化测试 目录 目 录O V目 录章 Python 学习必知 ................................................... ...

  4. 学习参考《Flask Web开发:基于Python的Web应用开发实战(第2版)》中文PDF+源代码

    在学习python Web开发时,我们会选择使用Django.flask等框架. 在学习flask时,推荐学习看看<Flask Web开发:基于Python的Web应用开发实战(第2版)> ...

  5. 学习Keras:《Keras快速上手基于Python的深度学习实战》PDF代码+mobi

    有一定Python和TensorFlow基础的人看应该很容易,各领域的应用,但比较广泛,不深刻,讲硬件的部分可以作为入门人的参考. <Keras快速上手基于Python的深度学习实战>系统 ...

  6. 代码编辑器[0] -> Vim/gVim[0] -> 基于 Python 的 gVim 环境配置(Windows)

     环境配置 / Environment Setup 基于Python开发的 gVim 环境配置(Windows) 使用方式参考 Vim 的使用. 1 基于vundle进行配置 Vim有多个扩展管理器, ...

  7. 学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码

    入门神经网络深度学习,推荐学习<深度学习入门:基于Python的理论与实现>,这本书不来虚的,一上来就是手把手教你一步步搭建出一个神经网络,还能把每一步的出处讲明白.理解神经网络,很容易就 ...

  8. Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  9. 【Machine Learning】决策树案例:基于python的商品购买能力预测系统

    决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...

  10. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

随机推荐

  1. Spring的Factories机制介绍

    Java 的 SPI 机制 Java SpringBoot 加载 yml 配置文件中字典项 Spring的Factories就是Spring版本的Java Spi. Spring Factories的 ...

  2. Java中的自动装箱与自动拆箱

    前言 在Java中,基本数据类型与其对应的封装类之间可以进行自动转换,这种特性称为自动装箱(autoboxing)和自动拆箱(unboxing).自动装箱和自动拆箱使得我们在使用基本数据类型时更加方便 ...

  3. Caused by: java.net.BindException: Address already in use: JVM_Bind(ActiveMq已经启动)

    1.本地启动项目开启两个启动类出错. Error creating bean with name 'brokerService' defined in class path resource [com ...

  4. Centos7.x 更换Jenkins构建目录

    原由:最近因为原来的Jenkins构建目录,已经要满了,想着更换下构建目录,此篇文件简单介绍下更换过程. 注:此文章可能仅适用于我个人,仅供参考.如有其他办法,欢迎评论指教. 查了几种方法,最终选为使 ...

  5. flink之Sink to MySQL和Redis

    前言 下面这篇文章是使用Flink的Sink 写出数据到Redis和MySQL Flink之Sink写入Redis和MySQL Flink需要添加Sink的时候,需要自己去添加写Sink,我们可以实现 ...

  6. AWS CLI入门教程(亲测)

    背景 因为公司有用到S3,所以整理了一个S3的简单入门教程.当然,入门之后有其他更高级的用法需求,就靠自己去查文档了.入门的教程能让你快速上手,不至于翻阅一堆文档,容易被劝退.这里主要是介绍如何用cl ...

  7. .NET 6学习笔记(8)生成自签证书

    上一篇我们通过导出IIS Express的自签证书,供ASP.NET Core程序启用HTTPS.本篇我们讨论如何生成自签证书.自签证书的生成,有多种方式.比如OpenSSL或PowerShell都可 ...

  8. 【Redis】Cluster集群

    一.Redis Cluster 工作原理 在引入哨兵机制后,解决了Redis主从架构Master故障时的主从切换问题,保证了Redis服务可用性.但依旧无法解决单机节点出现的写入性能瓶颈(网卡速率.单 ...

  9. 🚀 jdbc-plus是一款基于JdbcTemplate增强工具包, 已实现分页、多租户、动态表名等插件,可与mybatis、mybatis-plus等混合使用

    jdbc-plus简介 jdbc-plus是一款基于JdbcTemplate增强工具包, 基于JdbcTemplate已实现分页.多租户.动态表名等插件,可自定义扩展插件,可与mybatis.myba ...

  10. 2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号)。

    2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果.反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号). 福大大 ...