我一直在我们的项目中使用camelot,但是自两天以来我收到了以下错误消息。当尝试运行以下代码片段时:
import camelot
tables = camelot.read_pdf('C:\\Users\\user\\Downloads\\foo.pdf', pages='1')
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
DeprecationError: PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.
Run Code Online (Sandbox Code Playgroud)
我检查了这个文件,它确实使用 pdfFileReader: c:\ProgramData\Anaconda3\lib\site-packages\camelot\handlers.py
我以为我可以指定PyPDF2的版本,但是当我安装camelot时它会自动安装(因为该库是camelot使用的)。您认为有什么解决方案可以手动指定PyPDF2的版本吗?
tables = camelot.read_pdf(r"C:\Users\Ayush ShaZz\Desktop\Code_Python\FoodCaloriesList.pdf")
for table in tables:
print(table.df)
Run Code Online (Sandbox Code Playgroud)
它只阅读第一页。请有人帮助我
我正在尝试使用camelot-py v0.7.3 从多页PDF 文件中提取表格。
到目前为止,它对我来说是最好的 pdf 阅读器工具。我只需要逐行阅读 pdf 并手动检测表格。我尝试了许多其他工具,例如 tabula、PyPDF2/4、pdfminer 等。其中一些无法正确检测文本本身,其中一些扰乱了单词序列或列之间的间距。
但camelot-py 为我提供了最适合我的应用程序的格式的数据。
在使用camelot-py从pdf中提取数据的过程中,它几乎很好地检测了所有表的数据,除了很少的错误:
它将多个表分组到同一个“TableList”元素中。但我可以将这些分组的表分开。所以这里不需要担心。
这些分组表中的最后一个表在单独的“TableList”元素中重复。这种重复是我最关心的问题。
上述过程使用的代码如下:
tables = camelot.read_pdf('test.pdf', pages='1-end', flavor='stream')
tables.export('foo.csv', f='csv', compress=False)
for table in tables:
table_df = table.df
# Code to parse data from tables in each element converted into datafram
Run Code Online (Sandbox Code Playgroud)
为什么camelot-py 会重复一些表?有什么办法可以处理这种重复吗?
更多信息:
输入 PDF 文件:由于敏感数据,我无法共享 pdf 文件。但这里有一些细节可以让您很好地了解其结构: 所有页面仅包含表格。第 1 页:包含表 1,其中包含客户信息。表2至表4结构相同
第 2 页:包含表 4 和表 5 至 7 中的一些行,其结构与表 2 相同
第3页:表8至10,结构与表2相同
输出 CSV 文件:
foo-page-1-table-1:包含表 1
foo-page-1-table-2:包含表 1 和表 2 至 4 …
我正在努力提取一些无边框表格,如下图所示,它们来自 pdf 文件。我已经安装了 python-camelot,如图所示,并且仅适用于带边框的表。请查看以下详细信息:
平台 - Linux-4.5.5-300.fc24.x86_64-x86_64-with-fedora-24-Twenty_Four
sys - Python 3.6.1(默认,2017 年 5 月 15 日,11:42:04)[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)]
numpy - NumPy 1.15.4
cv2 - OpenCV 3.4.3
卡米洛特 - 卡米洛特 0.3.2
我一直在尝试从 pip 安装后运行 Excalibur,它要求我安装 Camelot,之后弹出此错误,
Traceback (most recent call last):
File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
return _run_code(code, main_globals, None,
File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
exec(code, run_globals)
File "/home/dev/.local/lib/python3.9/site-packages/excalibur/__main__.py", line 16, in <module>
main()
File "/home/dev/.local/lib/python3.9/site-packages/excalibur/__main__.py", line 10, in main
from excalibur.cli import cli
File "/home/dev/.local/lib/python3.9/site-packages/excalibur/cli.py", line 10, in <module>
from .tasks import split, extract
File "/home/dev/.local/lib/python3.9/site-packages/excalibur/tasks.py", line 13, in <module>
from camelot.ext.ghostscript import Ghostscript
ModuleNotFoundError: No module named 'camelot.ext'
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此模型、initdb 或 webserver 命令时,此输出显示,我尝试了多种方法来解决,但没有任何效果
我正在使用 Camelot 读取完整的 PDF 并从每个 PDF 中提取大约 112 个属性。
我使用表区域来提取属性
test_variable = camelot.read_pdf(filename, flavor='stream',
table_areas=['38, 340 ,50, 328'])
Run Code Online (Sandbox Code Playgroud)
问题是对于所有文档中的相同属性,表区域并不是恒定的。有时,我会在另一个文档的 x 或 y 坐标下方几个像素处找到相同的属性。
test_variable = camelot.read_pdf(filename, flavor='stream',
table_areas=['38,350,50,338'])
Run Code Online (Sandbox Code Playgroud)
有没有办法从同一区域获取确切的属性,而不管提取任何文档?
在发布此内容之前,我已经广泛搜索了 stackoverflow,但未能在 Camelot 页面尺寸上找到任何内容。有这个问题,建议使用table_region,但这并不能解决OP或我的问题。不幸的是,我无法发表评论来跟进OP,看看他们是否找到了解决方案。
我正在尝试做的事情:
\n\n我正在使用 Camelot 来识别表(显然)。有时,当我知道页面的哪个区域可能包含感兴趣的表时,我只想在该区域中进行搜索。camelot.read_pdf()使用\可以轻松完成此操作table_region- 我只需要提供一对坐标供 Camelot 进行搜索。
问题是,我使用 PyMuPDF 获取这些坐标,因此它们位于 PyMuPDF 的坐标系中。我已经弄清楚如何翻译这些坐标,但我缺少来自 Camelot 的一条关键信息 - 页面的尺寸。这些值很容易在 PyMuPDF(Page 类.bound(),我需要 Camelot 等效值。如果有人认为之间可能有替代方案,我可以在这里提供代数的进一步解释
到目前为止我已经尝试过的:
\n\n我阅读了文档。由于文档中的这一行,我想知道这是否可以提供一种获取尺寸的方法:“在使用 Lattice 时,可能会出现检测到较小的线 don\xe2\x80\x99t 的情况。最小线的大小检测到的结果是通过将 PDF 页面\xe2\x80\x99s 尺寸除以名为的缩放因子来计算的line_scale计算的。默认情况下,其值为 15"
我对替代方案持开放态度,本质上我要么想检查页面的某个区域是否包含表格(PyMuPDF坐标系中描述的区域,对于pdf页面,尺寸通常为(612, 792),原点位于顶部左角。camelot 的原点位于左下角),或者页面上的任何表格位于给定区域(如果有意义的话)。
\n我正在尝试使用 Camelot 从 pdf 中提取表格数据,但出现以下错误。
tables = camelot.read_pdf(file_name)
Run Code Online (Sandbox Code Playgroud)
GhostscriptNotFound:请确保安装了 Ghostscript 并且在 PATH 环境变量中可用
我已经安装了 Ghostscript,并且可以在 PATH 环境变量中使用它。
请查看以下版本详细信息:
请帮助解决此问题。
Camelot 是一个很棒的 Python 库,用于从 pdf 文件中提取表格作为数据框。但是,我正在寻找一种解决方案,该解决方案还返回写在表格正上方的表格描述文本。
我用来从 pdf 中提取表格的代码是这样的:
import camelot
tables = camelot.read_pdf('test.pdf', pages='all',lattice=True, suppress_stdout = True)
Run Code Online (Sandbox Code Playgroud)
我想提取表格上方写的文本,即THE PARTICULARS,如下图所示。
对我来说最好的方法应该是什么?感谢任何帮助。谢谢
我正在尝试使用 Camelot 从 pdf 中提取表格,但出现此属性错误。能否请你帮忙?
import camelot
import pandas as pd
pdf = camelot.read_pdf("Gordian.pdf")
Run Code Online (Sandbox Code Playgroud)
----> 1 pdf = camelot.read_pdf("Gordian.pdf") 中的 AttributeError Traceback(最近一次调用)
AttributeError: 模块“camelot”没有属性“read_pdf”
我正在尝试使用camelot从此pdf链接中提取表格,但是,当尝试以下代码时:
import camelot
file = 'relacao_medicamentos_rename_2020.pdf'
tables = camelot.read_pdf(file)
tables.export('relacao_medicamentos_rename_2020.csv', f='csv', compress=False)
Run Code Online (Sandbox Code Playgroud)
简单什么都不会发生。这很奇怪,因为当我尝试相同的代码但使用此 pdf链接时效果非常好。
我遇到了 Camelot 库的问题
我正在从 PDF 中提取数据,我的代码在前 23 页中运行“正常”,但在本例中,它无法解析文本/表格结尾
我想问题是字符串太长到达表格边界
也尝试过“流”但得到最差的结果
PDF源数据
PDF 输出布局
我解析的输出就像
"ALT4945\n24 V"
"70\/140 A ALT5860\n12 V\n90 A"
Run Code Online (Sandbox Code Playgroud)
期望的输出应该是
"ALT4945\n24 V 70\/140 A"
"ALT5860\n12 V\n90 A"
Run Code Online (Sandbox Code Playgroud)
我的第一个在上一页正确工作的代码是
tables = camelot.read_pdf("CROSSREFERENCE.pdf", pages=wPAGES, flavor="lattice")
Run Code Online (Sandbox Code Playgroud)
从网站 Camelot Doc https://camelot-py.readthedocs.io/en/master/api.html我得到了 pdf 解析器的可能配置。
"" PARAMS for lattice
line_scale (default: 15)
copy_text ((default: None))
shift_text (default: ['l', 't'])
line_tol (default: 2)
joint_tol (default: 2)
threshold_blocksize (default: 15)
threshold_constant (default: -2)
iterations (default: 0)
resolution (default: 300)
"""
Run Code Online (Sandbox Code Playgroud)
然后我遇到了这个问题,尝试用更多参数解决“玩”问题,但没有找到获胜者
tables = camelot.read_pdf("CROSSREFERENCE.pdf", pages=wPAGES, …Run Code Online (Sandbox Code Playgroud) 我需要从 pdf 中提取表格,这些表格可以是任何类型、多个标题、垂直标题、水平标题等。
我已经实现了两者的基本用例,发现 tabula 比 Camelot 做得更好,但仍然无法完美地检测所有表,我不确定它是否适用于所有类型。
因此,向实施过类似用例的专家寻求建议。
表格实现:
import tabula
tab = tabula.read_pdf('pdfs/PDF1.pdf', pages='all')
for t in tab:
print(t, "\n=========================\n")
Run Code Online (Sandbox Code Playgroud)
Camelot 实现:
import camelot
tables = camelot.read_pdf('pdfs/PDF1.pdf', pages='all', split_text=True)
tables
for tabs in tables:
print(tabs.df, "\n=================================\n")
Run Code Online (Sandbox Code Playgroud) python-camelot ×13
python ×12
pdf ×2
python-3.x ×2
tabula ×2
excalibur-py ×1
ghostscript ×1
pdf-parsing ×1
pdf-reader ×1
pdfminer ×1
pymupdf ×1
pypdf ×1