提取论文标题并自动重命名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方法手动加上才行,现在还不知道为什么?

PS:当前的这个程序当目录下有文件夹时会报错!

 

 

posted @ 2014-06-02 12:53  moqiguzhu  阅读(7988)  评论(0编辑  收藏  举报