Google Cloud Vision OCR输出文本多余空格去除:字符串处理方案咨询
针对Google Cloud Vision OCR泰语文本多余空格的后处理方案
核心思路
泰语属于黏着语,大量复合词、固定搭配会被OCR错误拆分为带空格的单个语素。后处理的核心是还原这些连续词汇,结合场景化词汇库匹配和语法规则处理,也可借助泰语分词工具实现通用化修复。
具体实现方案
1. 场景化规则替换(适配医药文本)
针对药品说明这类特定场景,整理高频出现的固定搭配,构建替换规则字典,批量去除不必要的空格:
- 服药相关:
รับ ประทาน→รับประทาน、ครั้ง ละ→ครั้งละ、วัน ละ→วันละ - 时间/状态:
หลัง อาหาร เช้า→หลังอาหารเช้า、กลาง วัน→กลางวัน、ครึ่ง ชั่วโมง→ครึ่งชั่วโมง - 名词短语:
ยา นี้→ยานี้、หมด อายุ→หมดอายุ、วัน ที่→วันที่ - 功效描述:
ยา แก้→ยาแก้、ปรับ การ บีบ ตัว→ปรับการบีบตัว、ของ ทาง เดิน อาหาร→ของทางเดินอาหาร
对应Python实现示例:
def fix_thai_ocr_spaces(ocr_text): # 可根据实际场景扩充规则 replace_rules = { "รับ ประทาน": "รับประทาน", "ครั้ง ละ": "ครั้งละ", "วัน ละ": "วันละ", "หลัง อาหาร เช้า": "หลังอาหารเช้า", "ยา นี้": "ยานี้", "หมด อายุ": "หมดอายุ", "นับ จาก": "นับจาก", "วัน ที่": "วันที่", "ได้ รับ": "ได้รับ", "ก่อน อาหาร เช้า": "ก่อนอาหารเช้า", "กลาง วัน": "กลางวัน", "ยา แก้": "ยาแก้", "คลื่นไส้ อาเจียน": "คลื่นไส้อาเจียน", "ปรับ การ": "ปรับการ", "บีบ ตัว": "บีบตัว", "ของ ทาง": "ของทาง", "เดิน อาหาร": "เดินอาหาร", "ครึ่ง ชั่วโมง": "ครึ่งชั่วโมง" } for old, new in replace_rules.items(): ocr_text = ocr_text.replace(old, new) # 统一去除多余连续空格 return ' '.join(ocr_text.split()) # 测试样本1 sample1_ocr = "NATURAL VITAMIN E 400 MEGA CAPSULE 400 IU รับ ประทาน ครั้ง ละ 1 เม็ด วัน ละ 1 ครั้ง หลัง อาหาร เช้า ยา นี้ หมด อายุ ภายใน 1 ปี นับ จาก วัน ที่ ได้ รับ" print(fix_thai_ocr_spaces(sample1_ocr)) # 测试样本2 sample2_ocr = "MOLAX - M TABLET 10 MG รับ ประทาน ครั้ง ละ 1 เม็ด วัน ละ 3 ครั้ง ก่อน อาหาร เช้า กลาง วัน เย็น ยา แก้ คลื่นไส้ อาเจียน ปรับ การ บีบ ตัว ของ ทาง เดิน อาหาร ควร รับ ประทาน ยา นี้ ก่อน อาหาร ครึ่ง ชั่วโมง" print(fix_thai_ocr_spaces(sample2_ocr))
2. 通用化分词修复(适配全场景)
如果需要处理非固定场景的泰语文本,可借助泰语分词工具(如PyThaiNLP),先对OCR文本去空格后重新分词,再拼接成正确格式,同时保留英文/数字部分的合理空格:
from pythainlp import word_tokenize import re def fix_with_thai_tokenizer(ocr_text): # 拆分英文数字段和泰语段 segments = re.split(r'([a-zA-Z0-9\s\-]+)', ocr_text) fixed_parts = [] for seg in segments: seg = seg.strip() if not seg: continue # 识别泰语段(匹配泰语Unicode范围) if re.search(r'[\u0E00-\u0E7F]', seg): # 先去除所有空格,再用分词工具拆分正确词汇 no_space = seg.replace(' ', '') tokens = word_tokenize(no_space, engine='newmm') fixed_parts.append(' '.join(tokens)) else: # 英文数字段去除连续多余空格 fixed_parts.append(re.sub(r'\s+', ' ', seg)) return ' '.join(fixed_parts) # 测试 print(fix_with_thai_tokenizer(sample1_ocr))
3. 优化建议
- 规则字典可通过收集实际OCR错误案例不断扩充,优先覆盖高频场景;
- 分词工具方案需注意版本兼容性,PyThaiNLP的
newmm引擎对日常泰语分词准确率较高; - 若文本中存在混合排版(如英文+泰语+数字),拆分处理能避免英文词汇被错误合并。
内容的提问来源于stack exchange,提问作者akkapolk
相关产品推荐
相关产品推荐

