识别pdf中论文标题并重命名PDF名称(2023.12.27)

改进思路:

当一个pdf文件重命名失败时不要终止程序,继续对下一个pdf文件进行操作

已打包成exe文件,链接放在评论区

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(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_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("\\","/")
pdf_directory = a





# 调用函数进行重命名

rename_pdfs(pdf_directory)
input("按下回车键可关闭窗口")
相关推荐
企鹅侠客1 小时前
开源免费文档翻译工具 可支持pdf、word、excel、ppt
人工智能·pdf·word·excel·自动翻译
美狐美颜sdk2 小时前
直播美颜工具架构设计与性能优化实战:美颜SDK集成与实时处理
深度学习·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
Fansv5874 小时前
深度学习-6.用于计算机视觉的深度学习
人工智能·深度学习·计算机视觉
deephub4 小时前
LLM高效推理:KV缓存与分页注意力机制深度解析
人工智能·深度学习·语言模型
奋斗的袍子0075 小时前
Spring AI + Ollama 实现调用DeepSeek-R1模型API
人工智能·spring boot·深度学习·spring·springai·deepseek
青衫弦语5 小时前
【论文精读】VLM-AD:通过视觉-语言模型监督实现端到端自动驾驶
人工智能·深度学习·语言模型·自然语言处理·自动驾驶
美狐美颜sdk5 小时前
直播美颜SDK的底层技术解析:图像处理与深度学习的结合
图像处理·人工智能·深度学习·直播美颜sdk·视频美颜sdk·美颜api·滤镜sdk
WHATEVER_LEO5 小时前
【每日论文】Text-guided Sparse Voxel Pruning for Efficient 3D Visual Grounding
人工智能·深度学习·神经网络·算法·机器学习·自然语言处理
Binary Oracle5 小时前
RNN中远距离时间步梯度消失问题及解决办法
人工智能·rnn·深度学习
阿_旭5 小时前
基于YOLO11深度学习的糖尿病视网膜病变检测与诊断系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·视网膜病变检测