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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:49:56