提取论文标题并自动重命名pdf文件

在我们确定一个研究课题之后,我们总是会先下载一堆相关的paper,看看这个领域现在已经做到一个什么地步,也看看别人是怎么做的,后面自己写paper的时候可以参考参考。当我们把相关的文章都下载到一个文件夹之后,有一个问题,一般我们从IEEE或是ACM相关站点下载的PDF文件的文件名不是相应文章的标题。我们希望文件名尽量能够反映文件的主要内容,文章的标题显然是最能概括文张内容的。
昨天上午,一个小时的时间就花在把下载下来的文件重命名上了。因为太费时间,想自己写个简单的小程序来完成这个工作。上网一找,嗬,这方面的内容还不少,在stack
overflow上面就有好几个帖子。这几个帖子我都看了,总结一下就是完成这个任务的方法有很多,可以用java来做,也可以python,还有C#,perl什么的都可以做,这些方法的一个共同点是需要额外的包或者模块来完成这个任务,java需要PDFBox,python需要PyPDF这个模块。
最后我选择的是用python来做。这是从简洁性角度考虑作出的选择,PyPDF模块的安装非常简单,安装之后编写程序也非常简单(就像一个小的脚本),还有python是跨平台的。选java的好处就是我可以将程序打包成EXE文件,非CS相关专业的学生可以会比较容易接受这种方式。

http://stackoverflow.com/questions/911672/extracting-titles-from-pdf-files

上面是stack overflow上面的相关页面。

http://pybrary.net/pyPdf/

这是下载pyPdf模块的页面,这个模块是作者一个人维护的,从10年4月开始就没有更新了,所以使用的Python版本还停留在2.x。

http://blog.isnotworking.com/2006/08/extract-pdf-title-from-all-files-on.html

这个页面给出了一个简答的例子。这个例子我在Python
2.7下运行通过。在3.2和3.3下运行报错,都是SyntaxError,3.x和2.x语法上还是存在比较大的差异的。

虽然可以自己手动修改PyPDF这个模块使之工作,但是我觉得没有必要。再说,A company named Phaseit has
forked the project and continued development and maintenance with my blessing as
pyPdf2 ( http://knowah.github.com/PyPDF2/).
或许这个 pyPdf2可以在3.x下工作,但我没有试过。

自动提取标题并重命名的代码如下:


# pyPdf available at http://pybrary.net/pyPdf/from pyPdf import PdfFileWriter, PdfFileReader
import os

for fileName in os.listdir(‘.‘):
actfile = file(fileName,"rb")
try:
if fileName.lower()[-3:] != "pdf": continue
input1 = PdfFileReader(actfile)
# print the title of document1.pdf
print ‘##1‘, fileName, ‘##2‘, input1.getDocumentInfo().title()
except:
print ‘##1‘, fileName, ‘##2‘

try:
trgtfilename = input1.getDocumentInfo().title + "_" + fileName
except:
print "\n## ERROR ## %s Title could not be extracted. PDF file may be encrypted!" % fileName
continue

del input1
actfile.close()

print ‘Trying to rename from:‘, fileName, ‘\n to ‘, trgtfilename
try:
os.rename(fileName,trgtfilename)
except:
print fileName, ‘ could not be renamed!‘
print ‘\n## ERROR ## Maybe the filename already exists or the document is already opened!‘

一个问题:Python3.x的寻找模块方式和之前相比好像也有点变化,将PyPDF直接安装在site-packages下,运行的example的时候会提示找不到pdf这个模块,需要使用sys.path.add方法手动加上才行,现在还不知道为什么?

提取论文标题并自动重命名pdf文件,布布扣,bubuko.com

时间: 2024-10-12 04:23:45

提取论文标题并自动重命名pdf文件的相关文章

WordPress 实现附件上传自动重命名但不改变附件标题

WordPress 上传媒体文件时,默认会保持文件名不变.如果上传文件名中包含中文字符,则会造成部分浏览器显示的文件 URL 疑似乱码甚至无法访问.网上流行较广的是通过注册  wp_handle_upload_prefilter 过滤器实现,但是该方案在重命名文件的同时也会将附件的标题修改,造成数据丢失.本篇文章将介绍一种既能自动重命名文件名且不改变附件标题的方法. 将以下代码添加到所使用主题的functions.php 文件中最后一个?>的前面即可. 1 function wp_coderbu

WordPress实现上传文件自动重命名

打开"wp-admin/includes/file.php"文件的第365行代码,原文是这样的: 可以看出,文件并没有自动重命名,因此我们只需要把圈起来的哪一行进行修改即可实现上传文件时自动重命名的效果,具体修改成下面这种形式: $new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext; 这段代码的意思是以当前时间的字符

WordPress 中文图片 上传 自动重命名

WordPress 中文图片 上传 自动重命名 由于国人很少有在上传图片前将图片名重命名为英语的,所以自动重命名对于WP来说尤为重要,特别是LINUX的不支持中文名的. WordPress上传多媒体的代码都存放于\wp-admin\includes\里面的file.php,打开这个文件,filename=wpuniquefilename(uploads['path'], file[′name′],unique_filename_callback );// Move the file to the

使用automation.py自动化重命名pdf书签,使全大写字母变成首字母大写

今天下载了一个英文pdf书籍,但书签全是大写英文字母,看上去有点别扭,于是想办法用自动化重命名pdf书签, 使书签全部变成首字母大写. pdf原始书签如下图: 重命名后的pdf书签 自动化动态效果图,两三分钟完成重命名工作. 下面介绍下自动化过程. automation.py是我封装的python调用UIAutomation的module,参考 http://www.cnblogs.com/Yinkaisheng/p/3444132.html 运行automation.py -h查看帮助 先使用

【C++】随机重命名MP3文件

新置MP3一件,竟然没有随机播放的功能.坑啊!身为程序媛一枚,自己动手吧~ 获取当前路径: char buf[1000]; GetCurrentDirectory(1000,buf); string cur_folder_file = string(buf)+"\\*.mp3"; 获取当前路径mp3文件列表: void getMp3Names(string filepath,vector<string> &names) { names.clear(); WIN32_

重命名PDF打印文件名

Odoo系统默认打印出来的PDF文件都是以当前文档模型对象对应的模板文件名命名的,对用户来说,这样的命名很不友好. 我们希望能够将打印出来的文件名以单号命名,下面是实现这种目的的方法. 在report_download的controller中,将对应的文件名用单据的名称替换掉即可 response.headers.add('Content-Disposition', 'attachment; filename=%s.pdf;' % filename)

Linux中重命名乱码文件

Linux下,如何将一个乱码的文件进行重命名 方法一: 命令格式:mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.tx [[email protected] o]# ls |egrep "[^a-zA-Z0-9.-]" ?°-?ˉ? ###从找到文件中找出乱码文件 [[email protected] o]# mv $(ls |egrep "[^a-zA-Z0-9.-]") tandao.txt 方法二: 命令格式

Python实现重命名一个文件夹下的图片

在网上查了一下python实现的图片重命名,工作中刚好用一下. 1 # -*- coding:utf8 -*- 2 import os 3 path = '新建文件夹 (2)/' 4 filelist = os.listdir(path) 5 for item in filelist: 6 # print('item name is ',item) 7 if item.endswith('.jpg'): 8 name = item.split('.',1)[0] 9 src = os.path.

c#如何在生成文件夹或者文件时候自动重命名

如果你在一个文件夹里面, 连续添加文件夹或者文件(不改名字), 那么系统会自动加上(1),(2),(3)... 这个效果我在网上搜不到, 自己写一下也不太难. 文件夹的:(不断点击按钮就有效果) 1 private void btnAdd_Click(object sender, EventArgs e) 2 { 3 string dir = @"d:\KuGouCache\abc"; 4 string newdir = dir; 5 int i = 0; 6 while (Direc