You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用pytesseract自动去除提取数字组内的空格?

批量处理OCR提取文本中的数字组空格问题

解决思路

根据输入输出规律,需保留每行前半部分的非数字标识/文本,将后半部分的数字块两两合并(去除组内空格),保留不同合并组之间的空格。

单行文处理代码

先实现单行文本的处理函数,验证逻辑:

import re

def process_line(line):
    # 清理多余空格,确保每行只有单个空格分隔元素
    cleaned_line = re.sub(r'\s+', ' ', line.strip())
    parts = cleaned_line.split()
    
    non_digit_parts = []
    digit_parts = []
    
    # 拆分非数字部分和数字部分
    for part in parts:
        if part.isdigit():
            digit_parts.append(part)
        else:
            non_digit_parts.append(part)
    
    # 两两合并数字块
    merged_digits = []
    for i in range(0, len(digit_parts), 2):
        if i + 1 < len(digit_parts):
            merged = digit_parts[i] + digit_parts[i+1]
        else:
            merged = digit_parts[i]  # 处理奇数个数字块的情况
        merged_digits.append(merged)
    
    # 拼接所有部分
    return ' '.join(non_digit_parts + merged_digits)

# 测试示例
test_lines = [
    "NON 1,1 mn 144 701 319 145",
    "ENS 432 755 205 000 227 755",
    "SHB 234 050 18 867 215 183"
]

for line in test_lines:
    print(process_line(line))

运行后输出:

NON 1,1 mn 144701 319145
ENS 432755 205000 227755
SHB 234050 18867 215183

批量处理图片的完整代码

结合pytesseract实现数百张图片的自动提取与处理:

import os
import pytesseract
from PIL import Image
import re

# 配置Tesseract路径(如果不在系统PATH中需手动指定)
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'  # Windows
# pytesseract.pytesseract.tesseract_cmd = '/usr/bin/tesseract'  # Linux/Mac

def process_line(line):
    cleaned_line = re.sub(r'\s+', ' ', line.strip())
    parts = cleaned_line.split()
    
    non_digit_parts = []
    digit_parts = []
    
    for part in parts:
        if part.isdigit():
            digit_parts.append(part)
        else:
            non_digit_parts.append(part)
    
    merged_digits = []
    for i in range(0, len(digit_parts), 2):
        if i + 1 < len(digit_parts):
            merged = digit_parts[i] + digit_parts[i+1]
        else:
            merged = digit_parts[i]
        merged_digits.append(merged)
    
    return ' '.join(non_digit_parts + merged_digits)

def process_image(image_path):
    img = Image.open(image_path)
    # 提取图片文本
    raw_text = pytesseract.image_to_string(img)
    # 按行处理并过滤空行
    processed_lines = [process_line(line) for line in raw_text.splitlines() if line.strip()]
    return '\n'.join(processed_lines)

def batch_process_images(input_dir, output_dir):
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    
    # 遍历所有图片文件
    for filename in os.listdir(input_dir):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            img_path = os.path.join(input_dir, filename)
            processed_text = process_image(img_path)
            
            # 保存处理后的文本
            output_filename = f"{os.path.splitext(filename)[0]}.txt"
            output_path = os.path.join(output_dir, output_filename)
            
            with open(output_path, 'w', encoding='utf-8') as f:
                f.write(processed_text)
            
            print(f"已完成:{filename}")

# 替换为你的图片目录和输出目录
input_dir = "你的图片文件夹路径"
output_dir = "处理后文本保存路径"
batch_process_images(input_dir, output_dir)

注意事项

  1. 确保已安装依赖:pip install pytesseract pillow
  2. 需安装Tesseract OCR引擎:
    • Windows:从官方仓库下载安装
    • Linux:sudo apt install tesseract-ocr
    • Mac:brew install tesseract

内容的提问来源于stack exchange,提问作者sebgus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:05:32