识别pdf中论文标题并重命名PDF名称(2024.1.2)防止标题在第2页

修改在第25行

range改为(2)

防止第一页是封面、标题在第2页的情况

python 复制代码
import os
import time




import fitz



def find_largest_font_sentence(pdf_path):

    largest_font_size = 0

    largest_font_sentence = ''

    maxsize=0

    # 打开PDF文件

    document = fitz.open(pdf_path)



    for page_number in range(2):

        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_size

        for 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=0

            for block in blocks:

                if "lines" in block:  # 检查是否存在 lines 字段

                    for line in block["lines"]:

                        for span in line["spans"]:
##判定句子中空格的个数如果大于3就认为它是标题而非期刊名称
                            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_size

            for 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):

    failed_files = []  # 记录重命名失败的文件

    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_sentence

            if  ":" in title:

                title = title.replace(":", ":")

            new_filename = title.strip() + ".pdf"

            new_filepath = os.path.join(directory, new_filename)

            try:
                os.rename(filepath, new_filepath)
            except FileNotFoundError:
                failed_files.append(filename)

    if len(failed_files) > 0:
        if len(failed_files) > 0:
            print(f"重命名失败 {len(failed_files)} 个pdf文件:")
            for file in failed_files:
                print(file)


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

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

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





# 调用函数进行重命名

rename_pdfs(pdf_directory)
input("按下回车键可关闭窗口")
相关推荐
钓了猫的鱼儿2 小时前
基于深度学习+AI的城市人行道障碍物目标检测与预警系统(Python源码+数据集+UI可视化界面+YOLOv11训练结果)
人工智能·深度学习·目标检测
AI人工智能+电脑小能手8 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
yyuuuzz8 小时前
独立站的技术基础与常见运维问题
大数据·运维·服务器·网络·数据库·aws
键盘上的猫头鹰11 小时前
【MySQL 教程(八)】索引、事务、用户管理、导入导出与分页查询
数据库·python·mysql
Royzst11 小时前
数据库知识点
数据库
雪的季节12 小时前
企业级 Qt 全功能项目
开发语言·数据库·qt
宋浮檀s12 小时前
应急响应——Web漏洞:命令执行+SSRF+弱口令
运维·数据库·sql·网络安全·oracle·应急响应
yurenpai(27届找实习中)13 小时前
redis_点评(21.好友关注——关注、取关功能实现;共同关注功能实现)
数据库·redis·缓存
Rick199313 小时前
索引的排序和分组
数据库·mysql