识别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("按下回车键可关闭窗口")
相关推荐
辞旧 lekkk29 分钟前
【Qt】信号和槽
linux·开发语言·数据库·qt·学习·mysql·萌新
2301_809204702 小时前
JavaScript中严格模式use-strict对引擎解析的辅助.txt
jvm·数据库·python
萑澈2 小时前
编程能力强和多模态模型的模型后训练
人工智能·深度学习·机器学习
LaughingZhu2 小时前
Product Hunt 每日热榜 | 2026-05-08
人工智能·经验分享·深度学习·神经网络·产品运营
zjy277772 小时前
mysql如何选择合适的索引类型_mysql索引设计实战
jvm·数据库·python
:mnong2 小时前
附图报价系统设计分析5
electron·pdf·vue·cad·dwg·定额
笨蛋不要掉眼泪2 小时前
Mysql架构揭秘:update语句的执行流程
数据库·mysql·架构
万邦科技Lafite2 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
秋93 小时前
ruoyi项目更换为mysql9.7.0数据库
数据库
Andya_net3 小时前
MySQL | MySQL 8.0 权限管理实践-精确赋予库、表只读等权限
android·数据库·mysql