Tabula Java的简单包装器,从PDF中读取表到数据文件

tabula-p的Python项目详细描述


表格py

构建状态pypi versionpatreon

<代码> TabulaP/<代码>是一个简单的Python包装,它是一个HRFF="HTTPS://GITHUBCOM/TabulAPDF/Tabula Java"Re="NoFoLoLo>"TabulaJava/A>,它可以读取PDF表。 您可以从pdf中读取表并将其转换为pandas的数据帧。tabula py还允许您将pdf文件转换为csv/tsv/json文件。

您可以查看示例笔记本并在google colab上试用。

 src=

要求

    < <爪哇>
    • 用JAVA 7, 8
    • 确认工作
< H2> OS

我确认在macos和ubuntu上工作。但有人证实它在windows 10上有效。另请参见以下设置步骤。

用法

安装

pip install tabula-py

如果您想成为贡献者,可以在克隆repo后安装依赖项,如下所示:

pip install -e .[dev, test]
pip install nox

对于运行文本和升,运行nox命令。

nox .

示例

tabula py使您能够将pdf中的表提取到dataframe和json中。它还可以从pdf中提取表并将文件保存为csv、tsv或json。

importtabula# Read pdf into DataFramedf=tabula.read_pdf("test.pdf",pages='all')# Read remote pdf into DataFramedf2=tabula.read_pdf("https://github.com/tabulapdf/tabula-java/raw/master/src/test/resources/technology/tabula/arabic.pdf")# convert PDF into CSVtabula.convert_into("test.pdf","output.csv",output_format="csv",pages='all')# convert all PDFs in a directorytabula.convert_into_by_batch("input_directory",output_format='csv',pages='all)

有关详细信息,请参见示例笔记本。我还建议阅读@aegis4048撰写的教程文章

获取表格py工作(Windows 10)

本说明最初由@lahoffm编写。谢谢!

    如果您还没有它,安装< HeRF="HTTPS://www. java. COM/En/Load /Maulal.jSP"Re="NoFoLoLo>"Java
  • 尝试运行示例代码(替换适当的pdf文件名)。
  • < LI>当代码调用<代码> Read pDFF()/代码>时,有一个<代码> FieloStudioRoRo/<代码>,当您在命令行上键入<代码> Java < /代码>时,它说 <代码> 'java'不被识别为内部或外部命令,可操作的程序或批处理文件< /代码>,您应该设置<代码>路径< /COD>环境变量,指向Java目录。查找主要的Java文件夹,如"代码> JRE…<代码>或<代码> JDK…< /代码>。在Windows 10上,它在<代码> C:\程序文件\java/Calp>
  • 在Windows 10上:控制面板->;系统和安全->;系统->;高级系统设置->;环境变量->;选择路径-->;编辑
  • 添加<代码> bin >代码>文件夹>代码> c:\程序文件\java\jRe1.80y144\bin < /代码>,点击OK一次。
  • <命令行>代码> java/Calp>现在应该打印选项列表,并且<代码> Tabula。Read Pofd()/Cux>应该运行。

选项

  • 页面(str,int,listofint,可选)
      <L指定要从中提取的页的可选值。它允许strint列表
    • 例如:1,'1-2,3','all'或[1,2]。默认值为1
  • 猜测(bool,可选):
    • 猜测每页要分析的部分。默认值true
    • 请注意,TabulaJava1.0.3中,猜测选项与格和流选项无关,可以同时使用猜测和点阵/流选项。
  • 区域(listoffloat,可选):
    • 要分析的页面部分(上、左、下、右)。
    • 示例:[269.875,12.75,790.5,561][[12.1,20.5,30.1,50.2],[1.0,3.2,10.5,40.2]。默认为整页
  • 相对面积(bool,可选):
    • 如果所有区域值都在0-100(包括0-100)之间,并且前面有"%",则输入将被视为页面实际高度或宽度的百分比。默认值false
  • 晶格(布尔,可选):
    • 电子表格选项已弃用)强制使用晶格模式提取PDF(如果每个单元格之间有分隔线,如在Excel电子表格的PDF中)。
  • 流(bool,可选):
    • no spreadsheet选项已弃用)强制使用流模式提取提取PDF(如果没有分隔每个单元格的规则行,如在Excel电子表格的PDF中一样)
  • 密码(bool,可选):
    • 解密文档的密码。默认值为空
  • 静默(bool,可选):
    • 抑制所有stderr输出。
  • 列(列表,可选):
    • 柱边界的x坐标。
    • 示例:[10.1、20.2、30.3]
  • 输出格式(str,可选):
    • 输出文件或提取对象的格式。
    • 对于read_pdf()jsondataframe
    • 对于convert_into()csvtsvjson
  • 输出路径(str,可选):
    • 输出文件路径。它的文件格式取决于格式
    • 与<代码>:TabulaJava./LI>的OutFrase<代码>选项
  • Java_选项(列表,可选):
      设置Java选项,如<代码> -XMX256M < /代码> ./LI>
  • pandas_选项(dict,可选):
    • 设置熊猫选项,如{'header':none}
  • 多个表(bool,可选):
    • 提取多个表。如果与多页一起使用(例如pages='all')将从每页中提取单独的表格。
    • 此选项使用JSON作为中间格式,因此如果TabulaJava输出格式将改变,则该选项不起作用。
  • 用户代理(str,可选)
    • 从URL下载PDF时设置自定义用户代理。否则它使用默认的urllib.request用户代理

FAQ

表格py不起作用

有几个可能的原因,但是 TabulaPy/Cuth>只是一个包装的< HRFF="HTTPS://GITHUBCOM/TabulAPDF/Tabula Java"Re="NoFoLoL>">代码> TabulaJava,确保您已经安装了Java,并且可以在终端上使用<代码> Java>代码>命令。许多问题记者忘了为 Java命令设置路径。

可以通过Python进程来检查TabulePy是否可以调用<代码> java/COD>使用<代码> Tabula.EngulyIn()/<代码>函数.< /P>

我不能从表格导入读取pdf

如果您安装了tabla,则会与命名空间冲突。删除tabula后,应安装tabula py

pip uninstall tabula
pip install tabula-py

结果与<代码> TabulaJava/COD>不同。或者,stream选项似乎无法正常工作

表格pyguess选项true。众所周知,在stream选项之间会产生冲突。如果您对您的结果感到奇怪,请设置guess=false

我可以使用选项xxx

是的。您可以按如下方式使用选项参数。该格式与Tabula Java的CLI相同。
read_pdf(file_path,options="--columns 10.1,20.2,30.3")

我怎么能忽略无用的区域?

简而言之,您可以使用区域电子表格选项提取。

In[4]:tabula.read_pdf('./table.pdf',spreadsheet=True,area=(337.29,226.49,472.85,384.91))PickedupJAVA_TOOL_OPTIONS:-Dfile.encoding=UTF-8Out[4]:Unnamed:0Col2Col3Col4Col50AB12RG1NaNRT23H2BB33RA3CT99EM4DI1234M5EIIW906NaN12Wh7NaN43EH8FEE4R4

如何使用区域选项

根据Tabula JavaWiki,有一个解释如何指定区域: < HeRF= ="http://Github.com /TabulAPDF/TabulaJava/wiki /使用命令行Tab拉提取器工具"您想要的表的抓取坐标"Re="NoFoLoLy"> http://GITHUB.COM/TabulAPDF/TabulaJava/wiki /使用命令行Tab拉提取器工具>您想要的表的抓取坐标/p>

例如,使用MacOS的预览,我得到了这个pdf的区域信息

image

java -jar ./target/tabula-1.0.1-jar-with-dependencies.jar -p all -a $y1,$x1,$y2,$x2 -o $csvfile$filename
<给定< < > >
# Note the left, top, height, and width parameters and calculate the following:y1=topx1=lefty2=top+heightx2=left+width

> TabulaJava:

pip install tabula-py
0

如果没有-r(与--spreadsheet相同)选项,则无法正常工作。

我遇到了parserror:error标记数据。C错误。如何提取多个表?

发生此错误时,pandas试图同时提取具有不同列大小的多个表。 使用多个表选项,可以避免此错误。

我想防止tabula py窃取我mac上每个通话的焦点

设置java_options=["-djava.awt.headless=true"]。荣誉@jakekara

我得到了在Windows上显示结果的字符。我怎样才能避免呢?

如果pdf的编码是utf-8,则在启动python进程之前,应在终端上设置chcp 65001。

pip install tabula-py
1

然后,您可以使用java_options="-dfile.encoding=utf8"选项提取utf-8pdf。此选项将添加encoding='utf-8'选项,该选项也是默认设置。

pip install tabula-py
2

如果文件编码不是utf-8,请适当替换65001utf-8

我无法在Windows上用空格提取文件/目录名

您应该自己转义文件/目录名。

我想使用另一个tabla.jar文件

您可以通过环境变量指定jar的位置

pip install tabula-py
3

我想从文档中提取多个表

您可以使用以下示例代码

pip install tabula-py
4

结果将是一个数据帧列表。如果要在文档中的所有页面上分隔表,请使用pages参数。

表格单元格内容有时会溢出到下一行。

您可以尝试使用lattice=true,如果表格中有分隔单元格的行,这通常会起作用。

贡献

有兴趣帮忙吗?我很想得到你的帮助!

您可以通过以下方式提供帮助:

  • 报告错误
  • 添加或编辑文档。
  • 通过拉取请求提供代码。
  • 写一篇博客文章或向那些可能从中受益的人传播关于表格的信息。

贡献者

另一个支持

您还可以通过对patreon的捐赠来支持我们在表格py上的持续工作。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将PHP生成的公钥转换为Java公钥   java在服务中启动可取消的后台任务   java我能做这个通用的事情吗?   java Axis 1.4.1版在IBM上的部署为8.5版   java如何进行同步web服务调用   java从Spring控制器中的多个select获取值   java如何在JFrame中声明类(包含sapache Poi)的对象   jaxb反序列化XML以在Java中动态创建类   java如何为部署在Google云上的应用程序实现Google OAuth?   java我想了解libgdx的资产管理器   Java整数溢出   Windows任务管理器javaw。exe内存与Java任务控制   java如何让Android等待?