Tabula Java的简单包装器,从PDF中读取表到数据文件
tabula-p的Python项目详细描述
表格py
<代码> TabulaP/<代码>是一个简单的Python包装,它是一个HRFF="HTTPS://GITHUBCOM/TabulAPDF/Tabula Java"Re="NoFoLoLo>"TabulaJava/A>,它可以读取PDF表。 您可以从pdf中读取表并将其转换为pandas的数据帧。tabula py还允许您将pdf文件转换为csv/tsv/json文件。
您可以查看示例笔记本并在google colab上试用。
要求
- < <爪哇>
- 用JAVA 7, 8 确认工作
我确认在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目录。
- 在Windows 10上:控制面板->;系统和安全->;系统->;高级系统设置->;环境变量->;选择路径-->;编辑
- 添加<代码> bin >代码>文件夹>代码> c:\程序文件\java\jRe1.80y144\bin < /代码>,点击OK一次。 <命令行>代码> java/Calp>现在应该打印选项列表,并且<代码> Tabula。Read Pofd()/Cux>应该运行。
选项
- 页面(str,int,
list
ofint
,可选)-
<L指定要从中提取的页的可选值。它允许
- 例如:1,'1-2,3','all'或[1,2]。默认值为1
str
,int
,列表
- 猜测(bool,可选):
- 猜测每页要分析的部分。默认值
true
请注意,TabulaJava1.0.3中,猜测选项与格和流选项无关,可以同时使用猜测和点阵/流选项。
- 猜测每页要分析的部分。默认值
list
offloat
,可选):
- 要分析的页面部分(上、左、下、右)。
- 示例:
[269.875,12.75,790.5,561]
或[[12.1,20.5,30.1,50.2],[1.0,3.2,10.5,40.2]
。默认为整页
- 如果所有区域值都在0-100(包括0-100)之间,并且前面有"%",则输入将被视为页面实际高度或宽度的百分比。默认值
false
- (
电子表格
选项已弃用)强制使用晶格模式提取PDF(如果每个单元格之间有分隔线,如在Excel电子表格的PDF中)。
- (
no spreadsheet
选项已弃用)强制使用流模式提取提取PDF(如果没有分隔每个单元格的规则行,如在Excel电子表格的PDF中一样)
- 解密文档的密码。默认值为空
- 抑制所有stderr输出。
- 柱边界的x坐标。
- 示例:
[10.1、20.2、30.3]
- 输出文件或提取对象的格式。
- 对于
read_pdf()
:json
,dataframe
- 对于
convert_into()
:csv
,tsv
,json
- 输出文件路径。它的文件格式取决于
格式
- 与<代码>:TabulaJava./LI>的OutFrase<代码>选项
列表
,可选):
dict
,可选):
- 设置熊猫选项,如
{'header':none}
- 提取多个表。如果与多页一起使用(例如
pages='all'
)将从每页中提取单独的表格。 - 此选项使用JSON作为中间格式,因此如果TabulaJava输出格式将改变,则该选项不起作用。
- 从URL下载PDF时设置自定义用户代理。否则它使用默认的urllib.request用户代理
FAQ
表格py
不起作用
有几个可能的原因,但是
可以通过Python进程来检查TabulePy是否可以调用<代码> java/COD>使用<代码> Tabula.EngulyIn()/<代码>函数.< /P>
我不能从表格导入读取pdf
如果您安装了tabla
,则会与命名空间冲突。删除tabula
后,应安装tabula py
。
pip uninstall tabula pip install tabula-py
结果与<代码> TabulaJava/COD>不同。或者,stream
选项似乎无法正常工作
表格py默认情况下,为初学者设置
guess
选项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的区域信息
> TabulaJava: 如果没有 发生此错误时,pandas试图同时提取具有不同列大小的多个表。
使用 设置 如果pdf的编码是utf-8,则在启动python进程之前,应在终端上设置chcp 65001。 然后,您可以使用 如果文件编码不是utf-8,请适当替换 您应该自己转义文件/目录名。 您可以通过环境变量指定jar的位置 您可以使用以下示例代码 结果将是一个数据帧列表。如果要在文档中的所有页面上分隔表,请使用 您可以尝试使用 有兴趣帮忙吗?我很想得到你的帮助! 您可以通过以下方式提供帮助: 您还可以通过对patreon的捐赠来支持我们在表格py上的持续工作。
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
pip install tabula-py
0
-r
(与--spreadsheet
相同)选项,则无法正常工作。我遇到了parserror:error标记数据。C错误。如何提取多个表?
多个表
选项,可以避免此错误。我想防止tabula py窃取我mac上每个通话的焦点
java_options=["-djava.awt.headless=true"]
。荣誉@jakekara我得到了
?
在Windows上显示结果的字符。我怎样才能避免呢?pip install tabula-py
1
java_options="-dfile.encoding=utf8"
选项提取utf-8pdf。此选项将添加encoding='utf-8'
选项,该选项也是默认设置。pip install tabula-py
2
65001
和utf-8
。我无法在Windows上用空格提取文件/目录名
我想使用另一个tabla.jar文件
pip install tabula-py
3
我想从文档中提取多个表
pip install tabula-py
4
pages
参数。表格单元格内容有时会溢出到下一行。
lattice=true
,如果表格中有分隔单元格的行,这通常会起作用。贡献
贡献者
另一个支持
推荐PyPI第三方库