zoukankan      html  css  js  c++  java
  • 提取论文标题并自动重命名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 "
    ## ERROR ## %s Title could not be extracted. PDF file may be encrypted!" % fileName
        continue
           
        del input1
        actfile.close()
        
        print 'Trying to rename from:', fileName, '
     to ', trgtfilename
        try:
            os.rename(fileName,trgtfilename)
        except:
            print fileName, ' could not be renamed!'
            print '
    ## ERROR ## Maybe the filename already exists or the document is already opened!'

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

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

  • 相关阅读:
    ThinkCMF框架任意内容包含
    网站防篡改脚本
    Apache Solr Velocity模板远程代码执行
    BurpSuite Intruder模块匹配返回包内容
    Kibana<6.6.0代码执行漏洞复现
    Thinkphp远程代码执行 payload汇总
    常用端口 简洁版
    NISP二级笔记(一) 信息安全管理
    oracle 中的角色
    oracle 用户对象权限
  • 原文地址:https://www.cnblogs.com/moqiguzhu/p/3764204.html
Copyright © 2011-2022 走看看