Skip to content

Latest commit

 

History

History
117 lines (90 loc) · 3.98 KB

File metadata and controls

117 lines (90 loc) · 3.98 KB

扫描件表格提取功能优化

本项目已针对扫描件PDF的表格提取进行了全面优化,特别适用于处理银行流水、财务报表等包含中文内容的扫描件表格。

主要优化功能

1. 增强的OCR识别

  • 更高分辨率: DPI提升至400,图片尺寸优化为2400x3200
  • 多语言支持: 支持英文、简体中文、繁体中文识别
  • 表格优化配置: 针对表格结构的OCR参数调优
  • 空格保持: 保持单词间空格,提高表格列分割准确性

2. 智能表格行识别

  • 灵活分隔符: 支持2个或更多空格、制表符、逗号、分号等多种分隔符
  • 中文数字模式: 识别"中文+数字"、"数字+小数"等常见表格模式
  • 序号检测: 自动识别"序号+中文+数字"的表格行结构
  • 智能分割: 当常规分隔符失效时,使用智能算法分割表格列

3. 多重表格识别策略

策略1: 数字文本混合模式

  • 识别包含数字、中文、英文混合的行
  • 支持金额格式(如123.45)、百分比、长数字(账号)
  • 支持中文数字(一二三四五六七八九十)

策略2: 序号模式识别

  • 自动检测连续序号(1、2、3...)开头的表格行
  • 适用于编号列表类型的表格

策略3: 关键词模式识别

  • 基于"合计"、"总计"、"序号"、"户名"、"账号"、"金额"等关键词
  • 自动定位表格区域和表头

4. 数据清理和验证

  • 空格规范化: 合并多个空格,移除零宽字符
  • 行数据验证: 过滤无效行,确保数据质量
  • 列数对齐: 自动调整行数据与表头列数一致
  • 长度限制: 防止异常长文本影响表格结构

使用示例

import { TableExtractService } from './services/tableExtractService';

const service = new TableExtractService();

// 提取扫描件表格
const tables = await service.extractTables({
    pdfPath: '/path/to/scanned-document.pdf',
    outputPath: '/path/to/output.xlsx'
});

console.log(`成功提取 ${tables.length} 个表格`);
tables.forEach((table, index) => {
    console.log(`表格 ${index + 1}:`);
    console.log(`页码: ${table.page}`);
    console.log(`列数: ${table.headers.length}`);
    console.log(`行数: ${table.rows.length}`);
    console.log(`表头: ${table.headers.join(', ')}`);
});

支持的表格格式

银行流水表格

序号 户名                           账号                    金额
1   济南市章丘区枣园街道后枣园村经济合作社  20400015942050000010641  54280.67
2   济南市章丘区枣园街道白塔村经济合作社    20400015942050000010557  87850.45

财务报表

项目          本期金额      上期金额      增减变动
营业收入      1000000.00   800000.00    25%
营业成本      600000.00    500000.00    20%

统计表格

地区    人口数量    GDP总值     人均GDP
北京    2154万     4万亿      18.5万
上海    2428万     4.3万亿     17.7万

技术特点

  1. 多层次识别: 从PDF文本提取 → OCR识别 → 多种表格模式匹配
  2. 容错性强: 处理扫描件中的文字倾斜、模糊、间距不规整等问题
  3. 中文优化: 专门针对中文表格的识别和处理
  4. 自动清理: 智能清理OCR识别中的噪声和格式问题
  5. Excel导出: 自动生成格式化的Excel文件

注意事项

  1. 图片质量: 扫描件分辨率建议300DPI以上
  2. 表格清晰度: 表格线条清晰,文字无严重模糊
  3. 语言设置: 确保Tesseract已安装中文语言包
  4. 内存使用: 高分辨率图片处理需要较多内存

依赖要求

  • node-tesseract-ocr: OCR文字识别
  • pdf2pic: PDF转图片
  • pdf-parse: PDF文本提取
  • unpdf: 高级PDF处理
  • xlsx: Excel文件生成

确保系统已安装Tesseract OCR引擎和中文语言包:

# macOS
brew install tesseract tesseract-lang

# Ubuntu
sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim tesseract-ocr-chi-tra