实体统一的代码实现

本文章主要是拿公司名的实体统一进行举例,例如:“河北银行股份有限公司” ,统一为“河北银行”
下面为代码讲解部分
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
  1. 将公司名中地名提前
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
  1. 去除通用后缀
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
  1. 去除停用词
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
  1. 初始化加载步骤,输出需要使用的词典
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
  1. 简单测试实体统一代码
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,感兴趣的同学可点击这里查看。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值