Total Pageviews

Tuesday 19 December 2017

PDFMiner,用Python解析PDF

Build Status
PDFMiner is a tool for extracting information from PDF documents. Unlike other PDF-related tools, it focuses entirely on getting and analyzing text data. PDFMiner allows one to obtain the exact location of text in a page, as well as other information such as fonts or lines. It includes a PDF converter that can transform PDF files into other text formats (such as HTML). It has an extensible PDF parser that can be used for other purposes than text analysis.

Features

  • Written entirely in Python.
  • Parse, analyze, and convert PDF documents.
  • PDF-1.7 specification support. (well, almost)
  • CJK languages and vertical writing scripts support.
  • Various font types (Type1, TrueType, Type3, and CID) support.
  • Basic encryption (RC4) support.
  • Outline (TOC) extraction.
  • Tagged contents extraction.
  • Automatic layout analysis.

How to Install

  • Install Python 2.6 or newer. (For Python 3 support have a look at pdfminer.six).
  • Download the source code.
  • Unpack it.
  • Run setup.py:
    $ python setup.py install
  • Do the following test:
    $ pdf2txt.py samples/simple1.pdf

For CJK Languages

In order to process CJK languages, do the following before running setup.py install:
$ make cmap
python tools/conv_cmap.py pdfminer/cmap Adobe-CNS1 cmaprsrc/cid2code_Adobe_CNS1.txt
reading 'cmaprsrc/cid2code_Adobe_CNS1.txt'...
writing 'CNS1_H.py'...
...
$ python setup.py install
On Windows machines which don't have make command, paste the following commands on a command line prompt:
mkdir pdfminer\cmap
python tools\conv_cmap.py -c B5=cp950 -c UniCNS-UTF8=utf-8 pdfminer\cmap Adobe-CNS1 cmaprsrc\cid2code_Adobe_CNS1.txt
python tools\conv_cmap.py -c GBK-EUC=cp936 -c UniGB-UTF8=utf-8 pdfminer\cmap Adobe-GB1 cmaprsrc\cid2code_Adobe_GB1.txt
python tools\conv_cmap.py -c RKSJ=cp932 -c EUC=euc-jp -c UniJIS-UTF8=utf-8 pdfminer\cmap Adobe-Japan1 cmaprsrc\cid2code_Adobe_Japan1.txt
python tools\conv_cmap.py -c KSC-EUC=euc-kr -c KSC-Johab=johab -c KSCms-UHC=cp949 -c UniKS-UTF8=utf-8 pdfminer\cmap Adobe-Korea1 cmaprsrc\cid2code_Adobe_Korea1.txt
python setup.py install

Command Line Tools

PDFMiner comes with two handy tools: pdf2txt.py and dumppdf.py.
pdf2txt.py
pdf2txt.py extracts text contents from a PDF file. It extracts all the text that are to be rendered programmatically, i.e. text represented as ASCII or Unicode strings. It cannot recognize text drawn as images that would require optical character recognition. It also extracts the corresponding locations, font names, font sizes, writing direction (horizontal or vertical) for each text portion. You need to provide a password for protected PDF documents when its access is restricted. You cannot extract any text from a PDF document which does not have extraction permission.
(For details, refer to the html document.)
dumppdf.py
dumppdf.py dumps the internal contents of a PDF file in pseudo-XML format. This program is primarily for debugging purposes, but it's also possible to extract some meaningful contents (e.g. images).
(For details, refer to the html document.)

from  https://github.com/euske/pdfminer/



PDFMiner

简介和安装

官方主页:https://euske.github.io/pdfminer/, github主页:https://github.com/euske/pdfminer
PDFMiner是一个可以从PDF文档中提取信息的工具。与其他PDF相关的工具不同,它注重的完全是获取和分析文本数据。
PDFMiner允许你获取某一页中文本的准确位置和一些诸如字体、行数的信息。
它包括一个PDF转换器,可以把PDF文件转换成HTML等格式 (不能看就是了..)。
它还有一个扩展的PDF解析器,可以用于除文本分析以外的其他用途。
PDFMiner内置两个好用的工具:pdf2txt.pydumppdf.py:
  • pdf2txt.py: 从PDF文件中提取所有文本内容。但不能识别画成图片的文本,这需要特征识别。对于加密的PDF你需要提供一个密码才能解析,对于没有提取权限的PDF文档你得不到任何文本。
  • dumppdf.py: 把PDF文件内容变成准XML格式。这个程序主要用于debug,但是它也可能用于提取一些有意义的内容(比如图片)。
除了官方安装方法(下载包用setup.py)外, 还可以很简单地: pip install pdfminer

使用

使用直接 pdf2txt.py [options] files ... 就ok了.

选项

实际使用的可选参数取决于用户使用的版本, 和官网上的参数可能有出入. 例如我这里没有-I, -E选项, 取而代之是-O参数
  • -o value : 指定输出文件名, 否则标准输出. 没有-t选项指定类型时根据后缀名判定类型.
  • -t value : 指定输出类型: text (默认), html, xml, tag. 不指定会根据文件名后缀判定.
  • -p value : 指定输出某些页, 例如1,2,3输出1到3页 (分隔符,无空格!).默认全部页输出. 内部会转成一个set类型对象.
  • -m value : 指定提取最多m页. 默认提取所有.
  • -O value : 给ImageWriter的参数,输出图片到相应文件夹, 默认不输出图片.
  • -C : 压制使用缓存, 会减少内存消耗但减慢分析过程. 这个缓存会在多文件时使用之前的一些信息(例如格式,文字大小等)作为本文件处理, 可能会出问题. 建议压制缓存.
  • -P value : 指定操作pdf需要的密码
  • -c value : codec, 就是使用的编码.默认 ‘utf-8’ .
  • -d : 增加debug级数.
layout分析相关 (实际使用LAParams对象进行储存参数并传递给主要的函数)
  • -n : 取消layout分析.
  • -A : 强制进行所有文本字符串的layout分析, 包括图片内的.
  • -V : 允许垂直书写的的检测.
  • -M value : char_margin, 控制作为一个text chunks的最大字符间距. 小于该距离为归为一组. 实际距离值取决于字符大小.
  • -L value : line_margin, 控制作为一个text box的最大行距. 小于该距离为归为一个box.
  • -W value : word_margin, 控制两个词之间是否插入空格的最小间距.
  • -F value : boxes_flow, 控制box order??. 值应该是-1 (只考虑水平) 到1 (只考虑垂直)之间, 默认0.5.
  • -Y value : 输出到HTML时的layout的模式, 默认normal(保持相应位置和换行), 还可以exact (准确保持每个字符位置, HTML变大且混乱)和loose (保持text block位置).
  • -s value : 控制输出的缩放比例, 只能用于HTML格式.
  • -R value : 控制旋转度数(360制)
  • 网页说明上说默认M=1.0,L=0.3,W=0.2 我测试版本默认是M=2.0, L=0.5, W=0.1.
  • -C不用时对多文件分析可能会出现一些异常, 例如只针对这个文件的输出是正常的, 但多文件处理时出现异常(例如layout解析出问题导致结果变成一个字一块). 如果所有文件格式一致可以不用-C, 否则建议-C.

No comments:

Post a Comment