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

修改在第25行
range改为(2)

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

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("按下回车键可关闭窗口")

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-02 19:32:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-02 19:32:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-02 19:32:02       82 阅读
  4. Python语言-面向对象

    2024-01-02 19:32:02       91 阅读

热门阅读

  1. 94. 二叉树的中序遍历(“颜色标记法”)

    2024-01-02 19:32:02       52 阅读
  2. 企微群发助手:企业微信营销的得力助手

    2024-01-02 19:32:02       59 阅读
  3. Web网页开发-初识web-笔记

    2024-01-02 19:32:02       58 阅读
  4. 如何使用版本控制工具(如Git)进行代码管理?

    2024-01-02 19:32:02       57 阅读
  5. uni-app、H5+ 下载并保存、打开文件

    2024-01-02 19:32:02       88 阅读
  6. 1303:鸣人的影分身

    2024-01-02 19:32:02       54 阅读
  7. 预编译仓库中的 Helm Chart

    2024-01-02 19:32:02       66 阅读
  8. Bye~ 2023

    2024-01-02 19:32:02       62 阅读
  9. 注解@Slf4j的使用

    2024-01-02 19:32:02       57 阅读
  10. SpringBoot统一标准响应格式及异常处理

    2024-01-02 19:32:02       47 阅读