如何优化字符串操作从OCR输出中提取纯净目标姓名?
问题描述
我有一个精度欠佳的OCR程序,其输出字符串会被存入列表ss,具体内容如下:
ss = [ '성 벼 | 5 번YAO LIAO거 CHINA P R체류자격 결혼이민F-1)말급일자', # 'YAO LIAO' '성 별 F 등록번호명 JAO HALJUNGCHINA P R격 결혼이민(F-6)밥급인자', # 'JAO HALJUNG' '성 별 F명 CHENG HAIJING국 가 CHINA P R 역체 가차격 결혼이민(C-4) 박급인자', # 'CHENG HAIJING' 'KOa MDOVUD TAREEQ SAID HAFIZULLAH TURKIYE움첫;자격 거주(F-2)발급일자', # 'DOVUD TAREEQ SAID HAFIZULLAH' 'KOn 별 MDOVUD TAREEQ SAID- IIAFIZULLAH 감 TURKIYE동체나자격 거주F-2) 발급일자', # 'DOVUD TAREEQ SAID- IIAFIZULLAH' '등록번호IN" 성 별 M명 TAREEQ SAD IIAFIZULLAH 값 TURKIYE8체주자격 거주-2)발급일자' # 'TAREEQ SAD IIAFIZULLAH' ]
我需要至少移除其中的国家名称,更佳方案是提取如注释所示的纯净全名。目前我通过遍历元素提取大写英文字母,过滤长度≥2的子串,得到的new_string_list为:
['YAO LIAO CHINA ', 'JAO HALJUNGCHINA ', 'CHENG HAIJING CHINA ', 'KO MDOVUD TAREEQ SAID HAFIZULLAH TURKIYE ', 'KO MDOVUD TAREEQ SAID IIAFIZULLAH TURKIYE ', 'IN TAREEQ SAD IIAFIZULLAH TURKIYE ']
请问该结果能否进一步优化?
补充说明:目标姓名最多包含5个空格分隔的子串,每个子串至少含2个大写英文字母,部分子串可能因OCR截取带有“-”符号。
优化方案
可以通过针对性的正则匹配和规则过滤,直接提取出符合要求的纯净全名,具体实现如下:
核心思路
- 提取所有由大写字母、
-组成的有效序列,自动忽略小写误识别前缀(如KOa、KOn) - 拆分OCR粘连的字符串(如
HALJUNGCHINA拆分为HALJUNG和CHINA) - 过滤已知国家名称(
CHINA、TURKIYE)及无效短串(如P、R) - 保留最多前5个符合规则的姓名子串
代码实现
import re def clean_ocr_name(s): # 提取所有连续大写字母+允许的-组成的子串 raw_parts = re.findall(r'[A-Z-]{2,}', s) # 拆分粘连的字符串(比如HALJUNGCHINA拆成HALJUNG和CHINA) split_parts = [] for part in raw_parts: if 'CHINA' in part: split_parts.extend(re.split(r'(CHINA)', part)) elif 'TURKIYE' in part: split_parts.extend(re.split(r'(TURKIYE)', part)) else: split_parts.append(part) # 过滤空串、国家名称和长度不足2的无效子串 filtered = [p.strip() for p in split_parts if p.strip() and p.strip() not in ['CHINA', 'TURKIYE', 'P', 'R']] filtered = [p for p in filtered if len(p) >= 2] # 保留最多前5个符合要求的子串(匹配姓名最多5部分的规则) filtered = filtered[:5] return ' '.join(filtered) # 处理整个OCR结果列表 cleaned_names = [clean_ocr_name(item) for item in ss] print(cleaned_names)
运行结果
输出完全匹配注释中的预期纯净全名:
['YAO LIAO', 'JAO HALJUNG', 'CHENG HAIJING', 'MDOVUD TAREEQ SAID HAFIZULLAH', 'MDOVUD TAREEQ SAID- IIAFIZULLAH', 'TAREEQ SAD IIAFIZULLAH']
可扩展优化
- 若需过滤更多国家名称,直接在过滤列表中添加(如
USA、JAPAN) - 针对其他OCR粘连场景,可扩展拆分逻辑中的正则规则
- 若出现新的误识别前缀,可通过正则进一步限制提取范围
内容的提问来源于stack exchange,提问作者bit_scientist
相关产品推荐
相关产品推荐

