TableShot
用于PDF表格提取的唯一MCP服务器。 让任何人工智能助手都能从PDF中读取表格——没有其他工具能做到这一点。
   
Camelot、Tabula和Table Transformer是Python库,它们需要开发人员编写代码。TableShot是一个MCP服务器:Claude Desktop、Cursor和Windsurf可以直接使用它,无需任何代码。
安装约33MB。没有模型下载。没有API密钥。结果\
问题
让任何AI助手从PDF中读取表格。它不能——你得到汤这个词:
Sales Report Q1 2024 Product Price Quantity Total Widget A $10.00 100
$1,000.00 Widget B $25.50 50 $1,275.00 Widget C $5.99 200 $1,198.00TableShot为您呈现:
| 产品 | 价格 | 数量 | 总计 |
|---|---|---|---|
| 小部件A | 10.00美元 | 100 | 1000.00美元 |
| 小部件B | 25.50美元 | 50美元 | 1275.00美元 |
| 小部件C | 5.99美元 | 200美元 | 1198.00美元 |
| 小部件D | 149.00美元 | 10 | 1490.00美元 |
快速开始
克劳德桌面/光标/风帆
添加到MCP配置中:
{
"mcpServers": {
"tableshot": {
"command": "uvx",
"args": ["tableshot"]
}
}
}然后问: *“从/path/to/report.pdf中提取表格”*
点
pip install tableshot作为独立的MCP服务器运行:
tableshot # stdio transport (for MCP clients)
python -m tableshot # same thing工具
| 工具 | 它做什么 |
|---|---|
extract_tables | 将所有表提取为Markdown、CSV、JSON或HTML格式 |
list_tables | 快速扫描——提取前预览表格 |
extract_tables
source: str # File path or URL to a PDF (or image with [ml] extra)
pages: str = "all" # "all", "1", "1-3", "1,3,5"
format: str = "markdown" # "markdown", "csv", "json", "html"list_tables
source: str # File path or URL to a PDF
pages: str = "all" # "all", "1", "1-3", "1,3,5"返回找到的每个表的表计数、维度、标题和预览行。
例子
财务报告(带边框的表格)
输入: 贝莱德风格的季度收益PDF
输出(降价):
| | Q3 2023 | Q3 2022 | 9M 2023 | 9M 2022 |
| ------------------------------------ | ---------- | ---------- | ---------- | ---------- |
| Total revenue | $4,522 | $4,311 | $13,228 | $13,536 |
| Total expense | 2,885 | 2,785 | 8,538 | 8,578 |
| Operating income | $1,637 | $1,526 | $4,690 | $4,958 |
| Operating margin | 36.2% | 35.4% | 35.5% | 36.6% |提取于 25毫秒.
多表文档
输入: PDF与员工目录+预算摘要在同一页面上
输出: 这两个表都是用正确的标题分别提取的:
Table 1: 3 rows x 3 cols (Name, Department, Email)
Table 2: 4 rows x 2 cols (Category, Amount)宽桌(8列,横向)
| ID | Name | Q1 | Q2 | Q3 | Q4 | Total | Status |
| --- | ----- | --- | --- | --- | --- | ----- | ------ |
| 1 | Alpha | 100 | 150 | 200 | 250 | 700 | Active |
| 2 | Beta | 90 | 110 | 130 | 170 | 500 | Active |
| 3 | Gamma | 0 | 0 | 50 | 80 | 130 | New |所有4种输出格式(Markdown、CSV、JSON、HTML)均可用于每次提取。
基准测试
在10个PDF文件上进行了测试,涵盖了有边框的表格、多表格页面、多页面文档, 特殊字符、宽表和真实财务报表。
| 度量 | 结果 |
|---|---|
| 带边框的表格精度 | 8/8完全匹配 |
| 速度(带边框的表格) | 每次提取4-25ms |
| 速度(3页财务PDF) | 182毫秒 |
| 输出格式有效性 | 36/36通行证(9份PDF x 4种格式) |
测试数据
生成的夹具--单击 来源 为了查看输入的PDF, 输出 查看TableShot提取的内容:
| 夹具 | 描述 | 来源 | 输出 | 速度 |
|---|---|---|---|---|
| simple_bordered | 4列销售报告(产品、价格、数量、总计) | 提取 | 10ms | |
| multi_table | 一页两表:员工目录+预算汇总 | 提取 | 10ms | |
| single_row | 最小表--表头+一个数据行 | 提取 | 4ms | |
| multi_page | 每页一张表,共2页 | 提取 | 9毫秒 | |
| empty_page | 仅第1页文本;第2页有一张表 | 提取 | 6ms | |
| special_chars | 带有 $, :, ", &, <> | 提取 | 6ms | |
| wide_table | 8列横向表格(第1季度至第4季度,总计,状态) | 提取 | 11毫秒 |
真实世界的PDF(由于大小/许可,不包括在仓库中):
| 描述 | 表格 | 速度 | |
|---|---|---|---|
| 贝莱德模拟 | 生成贝莱德季度收益表的模拟(5列) | 1个表,11行 | 25ms |
| 财务报表示例 | 具有复杂视觉格式的3页财务报表(155KB) | 3个表,75行 | 182ms |
| NHM表格 | 包含55个表格的56页大文档(25MB) | 55个表格,2321行 | 5.8秒 |
完全机器可读的结果 benchmarks/results.json.比较前后的详细信息请参见 基准/结果.md.
vs其他工具
| TableShot | Camelot | Tabula py | 表格转换器 | |
|---|---|---|---|---|
| 安装 | ~33MB,无其他 | 需要Ghostscript | 需要Java(100-300MB) | 需要PyTorch(700MB-5GB) |
| 速度 | ~10ms/表 | >20s最坏情况 | 变量(JVM启动) | 2-5s/页 |
| 带边框的桌子 | 优秀 | 优秀 | 良好 | 优秀 |
| 无界 | 良好(文本回退) | 较差 | 更好的检测 | 最佳 |
| MCP支持 | 本地 | 无 | 无 | 没有 |
| 维护 | 活跃 | ~5年过时 | 活跃 | 活跃 |
需要扫描的PDF或图像?
基本安装处理带有文本层的原生PDF(90%以上的实际用例)。 对于扫描的文档和图像:
pip install tableshot[ml] # Table Transformer for image-based tables
pip install tableshot[ocr] # OCR for scanned documents (ONNX, no PyTorch)
pip install tableshot[all] # Everything随着 [ml] 安装后,TableShot会自动检测PDF是否有文本层:
- 文本层存在 --使用pdfplumber(快速,~10ms)
- 扫描/无文本层 --使用Table Transformer进行检测,使用pdfplumber进行文本提取
- 图像文件 (PNG、JPEG)-使用表格转换器+OCR(需要
[ocr])
您还可以强制ML后端: extract_tables("/path/to/scan.pdf", backend="ml")
运作原理
PDF/Image ──> Smart Router ──> Table Detection ──> Cell Extraction ──> Formatted Output
| |
| PDF with text layer: | Markdown
| pdfplumber (lines → text fallback) | CSV
| | JSON
| Scanned PDF / Image (with [ml]): | HTML
| Table Transformer → pdfplumber text / OCR |- pdfplumber 处理PDF解析和表检测(MIT)
- pypdfium2 将PDF页面渲染为ML后端的图像(Apache-2.0)
- 变压器表 (可选
[ml])检测图像中的表格(MIT) - MCP-SDK 通过stdio传输将工具暴露给AI助手(MIT)
基本安装总量:~33MB。没有模型下载。无需GPU。
已知限制
所有基于规则的PDF表格提取器(包括Camelot和Tabula)都有这些限制:
- 具有视觉格式的财务报表 --由空格而非单元格边框定位的金额可能会在列之间分割
- 扫描的PDF/图像 --基本安装中没有OCR(使用
tableshot[ml]或tableshot[ocr]) - 含有方程式的科学论文 --内联数学中断表边界检测
- 复杂的无边框表格 --列对齐不明确会导致误检测
我们对此是诚实的。对于边缘情况, tableshot[ml] 添加了Table Transformer支持。
贡献
git clone https://github.com/Bespoke34/tableshot.git
cd tableshot
pip install -e ".[dev]"
pip install fpdf2 # for generating test fixtures
python tests/generate_fixtures.py # create test PDFs
pytest -m "not slow" # run 160 tests (skip ML tests)
pytest # run all 167 tests (needs [ml] extra)
ruff check src/ tests/ # lint- 95%的测试覆盖率,所有测试必须通过
- 抹布干净,无绒布警告
- MIT许可证——所有依赖项必须与MIT/Apache-2.0/BSD兼容
许可证
麻省理工学院
