本文章主要是拿公司名的实体统一进行举例,例如:“河北银行股份有限公司” ,统一为“河北银行”
下面为代码讲解部分
1.建立main_extract,当输入公司名,返回会被统一的简称
def main_extract(company_name,d_4_delete,stop_word,d_city_province):
"""
company_name 输入的公司名
stop_word 停用词
d_4_delete 后缀名
d_city_province 地区
"""
company_name_list = pseg.cut(company_name)
# 前置获取到的地名
company_name_list = city_prov_ahead(company_name_list, d_city_province)
# 去除通用后缀
company_name_list = delete_suffix(company_name_list, d_4_delete)
# 其他自定义function
company_name_list = my_function(company_name_list)
company_name = ''.join(company_name_list)
return company_name
- 将公司名中地名提前
def city_prov_ahead(company_name_list,d_city_province):
# 公司名中地名的部分
city_prov_lst = []
# 公司名中其他部分
other_lst = []
# TODO: 将公司名中地名的部分添加至city_prov_lst,将公司名中非地名的部分添加至other_lst。
for word, flag in company_name_list:
if word in d_city_province:
city_prov_lst.append(word)
else:
other_lst.append(word)
return city_prov_lst+other_lst
- 去除通用后缀
def delete_suffix(company_name_list,d_4_delete):
# TODO:识别公司名中通用后缀并删除
for word in company_name_list[:]:
if word in d_4_delete:
company_name_list.remove(word)
return company_name_list
- 去除停用词
def my_function(company_name_list):
other_stop_word = set(('分行','财务'))
for word in company_name_list[:]:
# 去除“分行”、“财务”
if word in other_stop_word:
company_name_list.remove(word)
# 去除空格
word = word.replace(' ','')
return company_name_list
- 初始化加载步骤,输出需要使用的词典
def my_initial():
#加载城市名、省份名
d_city_province = set()
with open("../data/dict/co_City_Dim.txt", encoding='utf-8') as cts:
for ct in cts.readlines():
d_city_province.add(ct[:-1])
with open("../data/dict/co_Province_Dim.txt", encoding='utf-8') as prvs:
for prv in prvs.readlines():
d_city_province.add(prv[:-1])
#加载公司后缀
d_4_delete = set()
with open(r"../data/dict/company_suffix.txt", encoding='utf-8') as sfs:
for sf in sfs.readlines():
d_4_delete.add(sf[:-1])
#加载停用词
stop_word = set()
with open(r"../data/dict/stopwords.txt", encoding='utf-8') as sts:
for st in sts.readlines():
stop_word.add(st[:-1])
return d_4_delete,stop_word,d_city_province
- 简单测试实体统一代码
d_4_delete,stop_word,d_city_province = my_initial()
company_name = "河北银行股份有限公司"
# 对公司名提取主体部分,将包含相同主体部分的公司统一为一个实体
company_name = main_extract(company_name,d_4_delete,stop_word,d_city_province)
print(company_name)
我们可以看到,打印结果为:河北银行
以上训练数据及代码已上传至github,感兴趣的同学可点击这里查看。谢谢!