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

Python中Counter统计字符串时如何归并相似错拼项到标准匹配

基于Counter的错拼输入聚合统计方案

原有Counter统计逻辑不需要重构,直接在其输出结果上做相似度匹配聚合即可,整体实现无额外重型依赖,适配拼写错误、漏空格、多空格这类常见人工输入问题。

  • 相似度计算直接使用Python标准库difflib.SequenceMatcher,不需要安装第三方NLP包,对短文本输入的匹配精度足够覆盖常规错拼场景
  • 遍历Counter的键值对,为每一条原始输入匹配相似度最高的标准参考值,设置阈值过滤完全不相关的无效输入
  • 聚合时单独拆分「完全匹配标准写法的计数」和「相似错拼写法的总计数」,可选保留错拼明细方便后续校验调整
from collections import Counter
from difflib import SequenceMatcher

# 配置项:按需调整
STANDARD_INPUTS = ["Input 1", "Input 2"]  # 预设的标准参考输入列表
SIMILARITY_THRESHOLD = 0.8  # 相似度阈值,短文本建议设置在0.75-0.85区间

def match_standard_input(raw_text: str, standard_list: list[str]) -> tuple[str | None, float]:
    """为原始输入匹配最相似的标准值,返回(匹配到的标准值, 相似度得分)"""
    highest_score = 0
    matched_std = None
    # 预处理:统一转小写、去掉首尾空白,减少格式差异带来的匹配误差
    processed_raw = raw_text.strip().lower()
    for std in standard_list:
        processed_std = std.strip().lower()
        score = SequenceMatcher(None, processed_raw, processed_std).ratio()
        if score > highest_score:
            highest_score = score
            matched_std = std
    # 得分低于阈值则判定为无有效匹配
    return (matched_std, highest_score) if highest_score >= SIMILARITY_THRESHOLD else (None, highest_score)

# --------------- 原有统计逻辑完全保留 ---------------
# 替换为实际读取到的人工输入文本列表
raw_input_list = [
    "Input 1", "Input 1", "Input 1",
    "Input 2",
    "Input1", "Inpt 1",
    "Input  2", "Iput 2"
]
raw_counter = Counter(raw_input_list)
# ---------------------------------------------------

# 聚合结果初始化
final_result = {
    std: {
        "exact_count": 0,
        "typo_total_count": 0,
        "typo_details": dict()
    } for std in STANDARD_INPUTS
}
unmatched_total = 0

# 遍历Counter结果做匹配聚合
for raw_text, cnt in raw_counter.items():
    matched_std, _ = match_standard_input(raw_text, STANDARD_INPUTS)
    if not matched_std:
        unmatched_total += cnt
        continue
    # 区分完全匹配和错拼匹配
    if raw_text.strip() == matched_std:
        final_result[matched_std]["exact_count"] += cnt
    else:
        final_result[matched_std]["typo_total_count"] += cnt
        final_result[matched_std]["typo_details"][raw_text] = cnt

运行上述代码后,示例数据的统计结果为:Input 1完全匹配计数3,错拼总计数2;Input 2完全匹配计数1,错拼总计数2,完全匹配需求中的统计口径。

调优建议

  • 如果漏空格场景占比高,可以在相似度计算前增加预处理逻辑,比如移除所有空白字符、特殊符号后再比对,能大幅提升漏输入空格场景的匹配准确率
  • 阈值不要设置过低,避免将无关输入错误归类;文本长度越长,阈值可适当下调,长度小于10的短输入阈值建议不低于0.7
  • 如果后续遇到谐音、字符顺序错乱等更复杂的错拼场景,只需要替换match_standard_input里的相似度计算逻辑即可,外层Counter遍历、聚合的代码不需要改动

内容的提问来源于stack exchange,提问作者IRed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:06:21