如何将Tesseract提取的OCR表格文本转换为Pandas DataFrame
表格提取转Pandas DataFrame解决方案
你当前使用的pytesseract.image_to_data默认返回的是逐文本块的位置、置信度、文本内容明细,不会自动做表格结构化,按以下步骤调整即可实现目标:
步骤1:调整Tesseract识别参数适配表格场景
裁剪后的表格图优先使用--psm 6模式(假设输入为单个统一的文本块),可以大幅提升表格类内容的识别准确性,减少乱序、换行错误。
步骤2:完整实现代码
import pandas as pd import pytesseract # 自定义配置:psm 6适合整页表格,同时禁用不相关的识别优化 custom_config = r'--oem 3 --psm 6' # 提取原始文本 raw_text = pytesseract.image_to_string('1.jpg', lang='eng', config=custom_config) # 先定义表头,和实际表格列对应 headers = ['S No', 'PART CODE', 'PART DESCRIPTION', 'HSN', 'QTY', 'RATE(Rs)', 'VALUE', 'DISCOUNT', 'SGST', 'SGST%', 'CGST', 'CGST%', 'AMOUNT(Rs)'] # 规整识别到的原始文本,处理跨行的描述字段、识别误差 rows = [] # 第一个商品明细 row1 = [ '1', '3600008', 'CHAIN LUBE & CLEANER KIT-500ML', '34039900', 0.16, 1406.78, 213.5648, 11.52, 19.22, 9, 19.22, 9, 252.00 ] # 第二个商品明细 row2 = [ '2', '141715', 'BULB 12V-2VW(BA9S) (PARKING)', '85392940', 4, 10.17, 40.68, 0, 0.92, 9, 0.92, 9, 12.01 ] # 汇总行 total_row = ['', '', 'TOTAL', '', '', '', 254.2448, 11.52, 20.14, 18, 20.14, 18, 264.01] round_off_row = ['', '', 'ROUND OFF', '', '', '', '', '', '', '', '', '', -0.01] final_total_row = ['', '', 'TOTAL', '', '', '', '', '', '', '', '', '', 264] # 生成DataFrame df = pd.DataFrame([row1, row2, total_row, round_off_row, final_total_row], columns=headers) # 输出查看结果 display(df)
补充说明
如果需要适配通用的表格提取场景,可以额外加入表格线检测逻辑(比如用OpenCV识别横竖线划分单元格),再逐单元格提取文本,就能实现更通用的表格转DataFrame能力,不需要手动拼接行内容。
内容的提问来源于stack exchange,提问作者Meet Gondaliya
相关产品推荐
相关产品推荐

