import jieba
import math
import pprint

jieba.load_userdict("userdict.txt")

filename = r'e:\code\所有企业名称.txt'    # 收集到的企业名称,一行一个
with open(filename) as f:
    data = [line.strip() for line in f]

word_freq ={}
for i in data:
    # 对i进行分词,得到一个集合
    seg_dict = set(jieba.cut_for_search(i))
    # 判断集合里的词是否在字典中,如果在,值=原值加1,如果不在,值等于1
    for word in seg_dict:
        if word_freq.get(word):
            word_freq[word] += 1
        else:
            word_freq[word] = 1


def calc_idf(length, count):
    idf =0
    if count:    
        idf = math.log(length/count,2)

    return idf

length = 48394    #共48394个企业

idf_dict={}
for k,v in word_freq.items():
    idf_dict[k] = calc_idf(length,v) 

fileObj = open('idf.py', 'w')  # 存到文件上,方便以后使用
fileObj.write('idf_dict = ' + pprint.pformat(idf_dict) + '\n')
fileObj.close()

要注意的地方:
分词模式要用full模式或搜索引擎模式,这样好一点。这样的话,北京和北京市的idf不会差异太大。以免后续分析造成问题。

总结:
至此用idf计算公司名称的的余弦相似度的项目就差最后一点了,但是目前遇到一个问题就是公司名称里的地名可能会大大影响到余弦相似度的计算。
比如“北京小米科技公司”和“北京市小米科技公司” 很相似,但因为北京和北京市的缘故可能造成他们的余弦相似度不太高。我需要尽量让北京和北京市这种地名差异的影响降到最小。
目前想到的办法是,让地名标准化。下一步我将解决这个问题。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐