背景:
本人最近在解决相似文本匹配的问题,具体点来说就是判断两个不一样的字符串在真实意义上是否是一样的。比如说’北京市海淀区海之蓝科技有限公司’ 和 ‘北京海淀海之蓝科技有限公司’ 指的是同一个公司, 但’北京海淀 海之蓝科技有限公司’ 和’北京海淀天之蓝科技有限公司’ 就不是一个公司。
在处理这个问题上,经常会遇到一些同义词,比如地名 “北京市” 和“北京”应该是一样的。我想到的办法是,把同义词全部换成标准化的词,比如把北京换成北京市,把海淀换成海淀区,然后再来比较两个名称,以减少不规范地名对名称相似度比较的影响。
a='北京市海淀区海之蓝科技有限公司'
b='北京海淀海之蓝科技有限公司'
synonyms = [['北京市','北京'],['海淀区','海淀']] #默认每对同义词的第一个词为标准词,暂未考虑同义词超过两个的情况。
def process_name_by_one_synonym(name,synonym):
if synonym[1] in name and synonym[0] not in name:
stand_name = name.replace(synonym[1],synonym[0])
else:
stand_name = name
return stand_name
def process_name_by_all_synonyms(name,synonyms):
for synonym in synonyms:
stand_name=process_name_by_one_synonym(name,synonym)
return stand_name
t=process_name_by_all_synonyms(b,synonyms)
print(t)
可能存在的问题:
- 同义词超过两个,不过我目前暂时没有遇到。
- 同一个字符串中出现一对同义词的情况,比如’北京市海淀海之蓝北京科技有限公司’。