如何利用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)
注意事项
- 确保已安装依赖:
pip install pytesseract pillow - 需安装Tesseract OCR引擎:
- Windows:从官方仓库下载安装
- Linux:
sudo apt install tesseract-ocr - Mac:
brew install tesseract
内容的提问来源于stack exchange,提问作者sebgus
相关产品推荐
相关产品推荐

