使用python统计高频词,模糊匹配不规范公司名称

原理:

1、使用jieba分词,取出不重要的高频词('股份','有限','公司'等),简化待查公司名,防止影响相似度。

2、使用FuzzyWuzzy计算待处理公司与标准公司名的相似度,取出最相似的(基于编辑距离Levenshtein Distance)

import jieba
import pandas as pd
tokenizer = jieba.dt
data=pd.read_excel(r"C:\Users\data\单词相似度.xlsx",sheet_name='待处理公司名')
m=[]
for x in set(data['待处理字段']):
    for y in tokenizer.cut(x):
        m.append(y)

pd.Series(m).value_counts()
import pandas as pd
from fuzzywuzzy import fuzz

data1=pd.read_excel(r"C:\Users\data\单词相似度.xlsx",sheet_name='待处理公司名')
data2=pd.read_excel(r"C:\Users\data\单词相似度.xlsx",sheet_name='标准公司名')

#根据分词后统计的高频词设置过滤列表stopwords,简化字符串,处理同义词
def sinple(x):
    temp=x
    for stopwords in ['有限','责任','公司','投资','证券','集团','(',')','管理','基金','私募','资产','控股','股份','资本','金控','国际','科技','建设','开发','发展','融资','租赁']:
        temp=temp.replace(stopwords,'')
    temp=temp.replace('农村商业银行','农商行')
    return temp
# print(sinple('广州越秀融资租赁有限公司'))

#给定一个待处理公司名,在标准公司名列表中找最相近的字符串
def findWord(word,list):
    maxRatio=0
    target=''
    for x in list:
        #先计算简化版的相似度,再加上未简化的相似度作为小数位
        ratio=fuzz.ratio(sinple(word),sinple(x))+fuzz.ratio(word,x)/100
        if ratio>maxRatio:
            maxRatio=ratio
            target=x
    return word,target,maxRatio
# findWord('广州国邦融资租赁有限公司 ',data2['company_nm'])

#输入一个待处理列表,为每一行找到最相近的字符串,并给出相似度,输出dataframe
def findlist(targetList,fromList):
    data=pd.DataFrame(columns=('target', 'result', 'ratio'))
    index=0
    for x in set(targetList):
        row=findWord(x,fromList)
        index+=1
        data.loc[index]={'target':row[0],'result':row[1],'ratio':row[2]}
    return data

data=findlist(data1['item_client'],data2['company_nm'])
data.to_csv(r'c:\Users\data\单词相似度.csv')

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值