识别pdf标题并重命名pdf

news/2024/11/15 2:55:07/

已导出为可执行文件
下载链接在评论区
此为改进版
解决了期刊名可能是最大字体的问题:
思路 识别字符串的空格>3则为标题

import os
import PyPDF2import fitzdef find_largest_font_sentence(pdf_path):largest_font_size = 0largest_font_sentence = ''maxsize=0# 打开PDF文件document = fitz.open(pdf_path)for page_number in range(document.page_count):page = document.load_page(page_number)blocks = page.get_text("dict")["blocks"]for block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] > largest_font_size:largest_font_size = span["size"]largest_font_sentence = span["text"]maxsize=largest_font_sizefor block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] ==maxsize:if largest_font_sentence!=span["text"]:largest_font_sentence = largest_font_sentence+' '+span["text"]if largest_font_sentence.count(' ')<4:largest_font_sentence=''largest_font_size=0for block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] > largest_font_size and span["text"].count(' ')>3:largest_font_size = span["size"]largest_font_sentence = span["text"]maxsize = largest_font_sizefor block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] == maxsize:if largest_font_sentence != span["text"]:largest_font_sentence = largest_font_sentence + ' ' + span["text"]return largest_font_sentence# 用于测试的PDF文件路径def rename_pdfs(directory):for filename in os.listdir(directory):if filename.endswith(".pdf"):filepath = os.path.join(directory, filename)filepath=filepath.strip()largest_font_sentence = find_largest_font_sentence(filepath)title=largest_font_sentenceif  ":" in title:title = title.replace(":", ":")new_filename = title.strip() + ".pdf"new_filepath = os.path.join(directory, new_filename)os.rename(filepath, new_filepath)print(f"Renamed {filename} to {new_filename}")# 指定包含英文论文PDF的目录路径
pdf_directory = "PDF文件目录"# 调用函数进行重命名
rename_pdfs(pdf_directory)

再次更新
import os
import time
import PyPDF2

import fitz

def find_largest_font_sentence(pdf_path):

largest_font_size = 0largest_font_sentence = ''maxsize=0# 打开PDF文件document = fitz.open(pdf_path)for page_number in range(1):page = document.load_page(page_number)blocks = page.get_text("dict")["blocks"]for block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] > largest_font_size:largest_font_size = span["size"]largest_font_sentence = span["text"]maxsize=largest_font_sizefor block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] ==maxsize:if largest_font_sentence!=span["text"]:largest_font_sentence = largest_font_sentence+' '+span["text"]if largest_font_sentence.count(' ')<4 or "arXiv" in largest_font_sentence:largest_font_sentence=''largest_font_size=0for block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] > largest_font_size and span["text"].count(' ')>3 and "arXiv" not in span["text"]:largest_font_size = span["size"]largest_font_sentence = span["text"]maxsize = largest_font_sizefor block in blocks:if "lines" in block:  # 检查是否存在 lines 字段for line in block["lines"]:for span in line["spans"]:if span["size"] == maxsize:if largest_font_sentence != span["text"]:largest_font_sentence = largest_font_sentence + ' ' + span["text"]return largest_font_sentence

用于测试的PDF文件路径

def rename_pdfs(directory):

for filename in os.listdir(directory):if filename.endswith(".pdf"):filepath = os.path.join(directory, filename)filepath=filepath.strip()largest_font_sentence = find_largest_font_sentence(filepath)title=largest_font_sentenceif  ":" in title:title = title.replace(":", ":")new_filename = title.strip() + ".pdf"new_filepath = os.path.join(directory, new_filename)os.rename(filepath, new_filepath)print(f"Renamed {filename} to {new_filename}")

指定包含英文论文PDF的目录路径

#比如pdf文件在 D:\学习\论文

#那么引号内需要输入的是 D:\学习\论文
print(“请输入论文的存放目录”)
a=input(“输入路径”)
a=a.replace(“\”,“/”)
pdf_directory = a

调用函数进行重命名

rename_pdfs(pdf_directory)
time.sleep(5)


http://www.ppmy.cn/news/1282787.html

相关文章

【Qt-数据库】

Qt编程指南 ■ SQLite■ CSV■ JSON ■ SQLite Qt 提供了很多操作数据库的类&#xff0c; SQLite 是非常小的&#xff0c;是轻量级的&#xff0c;完全配置时小于 400KiB&#xff0c;省略可选功能配置时小于 250KiB。 SQLite 是一个进程内的库&#xff0c;实现了自给自足的、无…

LabVIEW与PID在温度测控系统中的应用

LabVIEW与PID在温度测控系统中的应用 本案例介绍LabVIEW在温度控制系统中的应用&#xff0c;特别是结合PID算法。项目使用abVIEW作为主要开发工具&#xff0c;配合NI PCI-7831R数据采集和控制设备&#xff0c;实现了高效的温度调节。 系统的核心在于LabVIEW的FPGA模块&#x…

stm32学习笔记:TIM-定时中断和外部时钟

定时器四部分讲解内容&#xff0c;本文是第一部分 ​​​​​TIM简介 基本定时器 时基单元&#xff1a;预分频器、计数器、自动重装载寄存器 预分频器之前&#xff0c;连接的就是基准计数时钟的输入&#xff0c;由于基本定时器只能选择内部时钟&#xff0c;所以可以认为这根…

Unix常用命令整理

Unix常用命令 1. 文件和目录管理命令2. 文本文件处理命令3. 进程管理命令4. 网络管理命令5. 其他常用命令 本文列举了一些Unix操作系统中常用的命令和工具。对于开发人员和系统管理员来说&#xff0c;熟练使用这些命令和工具是非常必要的。此外&#xff0c;还有很多其他的命令和…

echarts自定义鼠标移上去显示,自定义图例,自定义x轴显示

提示&#xff1a;记录一下echarts常用配置,以免后期忘记 1.自定义鼠标移上去效果 tooltip: { show: true, trigger: "axis", axisPointer: { type: "shadow",//默认自定义效果 }, // //自定义鼠标移上去效果 formatter: (v) > { console.log("打印…

使用OpenSSL生成自签名SSL/TLS证书和私钥

使用OpenSSL生成自签名SSL/TLS证书和私钥 前提&#xff1a; 系统安装了OpenSSL&#xff1b; 系统&#xff1a;windows、linux都可&#xff1b; 1 生成私钥 创建一个名为 server.key 的私钥文件&#xff0c;并使用 RSA 算法生成一个 2048 位的密钥。 openssl genrsa -out s…

python dash 写一个登陆页 4

界面 代码&#xff1a; 这里引入了dash_bootstrap_components 进行界面美化 &#xff0c;要记一些className&#xff0c;也不是原来说的不用写CSS了。 from dash import Dash, html, dcc, callback, Output, Input, State import dash_bootstrap_components as dbc app Dash…

什么是EMC工程师?

摘要: 今天来介绍一下什么是EMC工程师。一 EMC工程师起源要了解什么是EMC工程师&#xff0c;我们首先要了解什么是EMC。 今天来介绍一下什么是EMC工程师。 一 EMC工程师起源 要了解什么是EMC工程师&#xff0c;我们首先要了解什么是EMC。 工程师这个职业相信大家都耳熟能详…