Python中如何将含义相同的文本词汇识别为同一词?
你原来的写法效率很低,而且有逻辑错误:每加一个替换规则就要遍历一次列表,数据量大的时候耗时会线性增长,同时第二次列表推导是直接遍历原始list1生成,会直接覆盖第一次的替换结果,根本拿不到你要的输出。
最推荐的高效实现是用映射字典做单次遍历,时间复杂度只有O(n),n为列表长度:
# 原始列表 list1 = ['data mining', 'datamining', 'data science', 'graph model'] # 同义词映射规则:key是需要替换的词,value是统一后的标准词 synonym_map = { 'datamining': 'data mining', 'data science': 'data mining' } # 一次遍历完成所有替换 list2 = [synonym_map.get(item, item) for item in list1]
运行后得到的list2就是你要的['data mining', 'data mining', 'data mining', 'graph model']。后续新增同义词规则只需要往synonym_map里加键值对即可,不需要修改遍历逻辑,也不会额外增加耗时。
如果你的同义词存在大小写、空格、小拼写误差这类格式差异,没法做精确匹配,可以加一层标准化预处理再匹配:
def normalize_str(s): # 自定义标准化规则:转小写、去除所有空格、去除多余符号等 return s.lower().replace(' ', '').strip() # 映射的key换成标准化后的字符串 synonym_map = { normalize_str('datamining'): 'data mining', normalize_str('data science'): 'data mining' } list2 = [synonym_map.get(normalize_str(item), item) for item in list1]
如果是需要处理语义层面的同义词(完全不同的词但含义一致,没有格式规律,没法手动穷举),可以搭配预训练词向量模型计算语义相似度做匹配,适合词库量极大的场景。
内容的提问来源于stack exchange,提问作者user12217822
相关产品推荐
相关产品推荐

