使用OpenCV和Python识别文本后匹配pandas DataFrame失败如何解决
问题根因
匹配失败核心原因是Tesseract OCR返回的识别结果默认携带尾部换行符和前后空白字符,直接用于匹配时无法命中DataFrame中干净的目标字符串。
你可以通过打印字符串原始表示的方式验证:在识别文本后添加代码print(repr(txt)),会得到输出'CMA CGM\n',尾部的\n换行符是匹配失败的直接原因。
修复方案
对OCR识别结果做前后空白字符清洗即可,修改识别文本的代码行:
# 原代码 txt = pytesseract.image_to_string(thr) # 修改为:strip()会去掉字符串前后所有空格、换行、制表符等空白字符 txt = pytesseract.image_to_string(thr).strip()
如果识别结果可能包含特殊符号,可额外增加正则清洗进一步过滤无效字符:
import re txt = pytesseract.image_to_string(thr) # 先移除非字母、数字、空格的特殊字符,再清洗前后空白 txt = re.sub(r'[^\w\s]', '', txt).strip()
修改后运行即可得到预期匹配结果:
ID Col 0 1 CMA CGM
补充优化建议
- 如果你的DataFrame指定列存在空值,匹配时可以添加
na=False参数避免抛出空值异常:
Res = df.loc[df['Col'].str.contains(txt, case=False, na=False)]
内容的提问来源于stack exchange,提问作者KDEss
相关产品推荐
相关产品推荐

