如何在Pandas DataFrame中实现适配OCR误差的模糊字符串搜索
OCR文本模糊匹配实现方案
前置依赖
Python标准库re不支持模糊匹配语法,需先安装第三方regex库:
pip install regex
实现代码
import regex import pandas as pd # 配置参数:允许的最大单字符替换次数,根据OCR误差程度调整,示例场景设为1即可 max_substitutions = 1 # 构造模糊匹配正则模式 pattern = '|'.join([f'({word}){{s<={max_substitutions}}}' for word in search_list]) # 对String列应用模糊匹配,overlapped=True保留重叠匹配结果,不需要可删除提升性能 df['Found'] = df['String'].apply(lambda x: regex.findall(pattern, x, overlapped=True))
注:如果你的文本数据源是df3,把代码中的df['String']替换为df3['String']即可对齐原有逻辑
效果验证
以你给出的示例测试:
输入字符串:
eh house tree unicorn jantern s g w there was 123 treadmill fountain 1 5 funny grash cymbal shampoo
搜索列表:['crash cymbal','unicorn lantern']
执行代码后Found列输出为['unicorn jantern', 'grash cymbal'],成功识别到两处存在1个字符替换误差的匹配结果。
注意事项
- 你的搜索词条长度为10-15字符,
max_substitutions建议设为1或2,数值过大会大幅提升误匹配概率 - 500条数据规模下该方案性能和原有精确匹配方案差距极小,无需额外优化
- 若需返回匹配到的原搜索词而非实际识别文本,可在代码中增加映射逻辑即可
内容的提问来源于stack exchange,提问作者Mark Heptonstall
相关产品推荐
相关产品推荐

