如何获取模糊匹配结果的位置区间(类似正则匹配的span方法)
Python模糊匹配同时获取得分和位置方案
你常用的RapidFuzz库本身就原生支持该需求,不需要额外引入其他依赖。
核心实现方法
RapidFuzz提供了partial_ratio_alignment函数,是partial_ratio的对齐增强版本,除了返回和partial_ratio完全一致的匹配得分外,还会返回长短文本的对齐位置信息,效果等价于正则匹配的span方法返回结果。
示例代码
首先安装依赖:pip install rapidfuzz
运行测试:
from rapidfuzz.fuzz import partial_ratio_alignment # 测试用长文本、待匹配短文本 long_content = "2024年最新活动通知:本周末线下技术沙龙将在科技园B座举办,欢迎报名参与" short_query = "技术沙陇将在科技园" # 故意设置错别字模拟模糊匹配场景 match_result = partial_ratio_alignment(short_query, long_content) # 核心返回字段说明 # - score: 模糊匹配得分,和partial_ratio返回结果完全一致 # - dest_start: 长文本中匹配片段的起始索引(左闭) # - dest_end: 长文本中匹配片段的结束索引(右开) # 直接获取等价于span的返回结果 match_span = (match_result.dest_start, match_result.dest_end) print(f"匹配位置:{match_span}") print(f"匹配到的文本片段:{long_content[match_span[0]:match_span[1]]}")
补充说明
- 如果你还在使用fuzzywuzzy,该库没有原生支持返回位置的函数,需要自行基于编辑距离对齐逻辑二次开发,成本较高,更推荐直接迁移到性能更强的RapidFuzz使用现成功能。
- 如果需要批量匹配多个查询词,可以先用RapidFuzz的process模块的
extract系列函数过滤达到得分阈值的结果,再对每个命中结果调用partial_ratio_alignment获取具体位置即可。 - 返回的
dest_start和dest_end是左闭右开的索引区间,和Python字符串切片、正则span方法的返回格式完全兼容,可以直接替换使用。
内容的提问来源于stack exchange,提问作者Peter Franek
相关产品推荐
相关产品推荐

