利用Python的PyMuPDF库,根据论文标题更改PDF的文件名

 Python中可以处理PDF的库有许多,PyMuPDF便是其中之一,该库的运行速度比较快,功能还是蛮强大的,可以试着用一下。

一般而言,可以采用读取PDF文件的metadata来获取论文的标题,但是有些PDF文件的metadata可能缺失,此时就比较棘手了。但是也可以通过读取PDF中文本内容,通过文本内容的字号大小来判断那些文本内容是论文的标题。

假设:一般情况下,标题字号比较大,同时位于第一页。

根据上述假设,我利用python中的PyMuPDF库,并根据论文标题来批量更改PDF的文件名,下面是可运行的代码(运行代码之前需要先安装PyMuPDF库)。

准确率的话,我自己试了试,感觉还算可以,大家也可以试一试。

安装PyMuPDF库

pip install pymupdf

可运行代码

import os
import fitz

path = 'D:\文献改名'.replace('\\', '/')
respath = 'D:\文献改名'
paper_name = os.listdir(path)
i = 1

for temp in paper_name:
    pdf_file = open(path + '/' + temp,'rb' )
    pdf_reader = fitz.open(pdf_file)  # 打开并建立一个PDF文件对象
    try:
        paper_title = pdf_reader.metadata["title"]  # 获取metadata中的PDF标题
        k=0
        if paper_title == "" or len(paper_title)<10: #如果元信息无法获取title时采用这种方法
            page = pdf_reader.load_page(0) #打开PDF第一页(一般论文题目都在首页),打开的页数也可更改
            text=page.get_text("dict") #采用字典方式读取页面内容
            for t in range(5): #一般标题在开头部分,只需要遍历前几个blocks
                if t < len(text["blocks"]):
                    #print(text["blocks"][t])
                    if "lines" in text["blocks"][t]:
                        if text["blocks"][t]["lines"][0]["spans"][0]["size"]>10: #采用字号的大小来筛选title,字号可根据自身情况更改
                            if text["blocks"][t]["lines"][0]["spans"][0]["text"] != " ": #防止文本为空的block被选为title
                                k=t #确定title可能在第几个block
                                break
            print("k",k)
            title= page.get_text("blocks")
            paper_title = title[k][4]
            if len(paper_title) > 100: #特殊情况,防止title字符过长
                paper_title=text["blocks"][k]["lines"][0]["spans"][0]["text"]
        i = int(i)
        print("i",i)
        pdf_file.close()
        pdf_reader.close()
        #title符合windows命名规范
        paper_title = str(paper_title).replace(':', ' ')
        paper_title = paper_title.replace('/', ' ')
        paper_title = paper_title.replace('\\', ' ')
        paper_title = paper_title.replace('*', ' ')
        paper_title = paper_title.replace('?', ' ')
        paper_title = paper_title.replace('"', ' ')
        paper_title = paper_title.replace("'", ' ')
        paper_title = paper_title.replace('<', ' ')
        paper_title = paper_title.replace('>', ' ')
        paper_title = paper_title.replace('|', ' ')
        paper_title = paper_title.replace('\n', ' ')
        paper_title.rstrip() #去除末尾空格
        new_name = paper_title+'.pdf'
        print(new_name)
        os.rename(path + '/' + temp, respath + '/'  + str(i)+ '_' + new_name)
    except FileNotFoundError:
        print("error")
        pass
    i = i + 1

参考链接

Tutorial - PyMuPDF 1.23.4 documentation

The Basics - PyMuPDF 1.23.4 documentation

Appendix 1: Details on Text Extraction - PyMuPDF 1.23.4 documentation

利用Python的PyPDF2库,根据论文标题批量修改pdf的文件名_pypdf2 批量命名-CSDN博客

根据论文标题重命名arxiv pdf文档_arxiv如何替换文章-CSDN博客

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值