
文本相似度
良知即吾心
这个作者很懒,什么都没留下…
展开
-
每日10行代码91:正则表达式的前瞻模式应用
今天想处理字符串相似度时,遇到一个实际问题: 假如一个公司的名字为 “武汉市中国石油武汉分公司” ,如果想把武汉替换为武汉市,直接替换的话会把第一个武汉也替换了,但我只想把后面一个武汉替换成武汉市,于是了解到了正则表达式的前瞻模式。所谓的前瞻模式正是解决这个问题的,比如想匹配武汉一词,但只想匹配后面不是“市”的武汉。也就是说前瞻模式会往后多看几个词,看是否匹配正则表达式。 为什么前瞻模式是往后看? 因为正则表达式的扫描是从左往右扫描的,对于扫描来说,未扫描的部分是前,扫描过的是后。但是对于整个文本来说就是开原创 2020-12-29 15:50:59 · 173 阅读 · 2 评论 -
每日10行代码89:处理结巴分词的词典文件,删掉所有的长词
为了让结巴分词时分的词尽量细一点,我决定处理下结巴分词的词典文件,删掉所有长度大于2的词。 filepath = r'C:\Python39\Lib\site-packages\jieba\dict.txt' with open("dict_new.txt",'w') as fn: with open(filepath,encoding='utf-8') as f: for line in f: i = line.split(' ')原创 2020-12-22 16:45:58 · 222 阅读 · 0 评论 -
每日10行代码88:结巴分词中控制词语切分粒度
今天用结巴分词时遇到一个问题: 我想切分: 武汉市环境卫生管理局 直接切分的话生成的是: 武汉市,环境卫生,管理局 但我希望的是: 武汉市,环境,卫生,管理,局 这时有两种方法: 用suggest_freq方法: jieba.suggest_freq(('管理','局'), True) 修改dict.txt: 直接修改jieba目录下的dict.txt文件,删掉相应的管理局,环境卫生等词语,删掉后,结巴分词不会立即生效,需要删掉jieba生成的cache文件,我的是在以下目录: C:原创 2020-12-21 23:17:04 · 356 阅读 · 0 评论 -
每日10行代码87:对企业名称进行分词,并计算idf,最后存入文件
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_dic原创 2020-12-18 00:14:50 · 442 阅读 · 0 评论 -
每日10行代码86: 计算两个向量的夹角余弦值
看到了许多求向量夹角余弦值的算法,感觉不够简单,我自己写一个,代码的行数是比较多,但比较容易理解。 a=[1,2,3,5,6] b=[1,5,4,1,6] def mo(vector): # 计算向量的模 sq = [i**2 for i in vector] # 把数组转成平方 sq_sum = sum(sq) # 求和 m = sq_sum ** 0.5 # 开方 return m def dot_mul(a,b): # 计算向量的卷积原创 2020-12-16 22:09:36 · 1500 阅读 · 0 评论 -
每日10行代码85:python计算企业名称中的词频
背景:因为要做一个项目,涉及到计算企业名称的相似度,以前用编辑距离算法效果不是很好,现在打算用下余弦相似度的方法,这个方法里面,需要计算词语的词频。 import jieba import openpyxl f= r'd:\temp\data.xlsx' wb = openpyxl.load_workbook(f) ws = wb.active data = (i[0].value for i in ws['B2:B69697']) #data= [ #'湖北晓晓工贸有限公司', #'西安市依依扶贫开发原创 2020-12-13 16:24:30 · 335 阅读 · 0 评论 -
每日10行代码128:对企业名称进行分词,并计算所有词的idf
import jieba import openpyxl import math f= r'd:\temp\data.xlsx' wb = openpyxl.load_workbook(f) ws = wb.active data = (i[0].value for i in ws['B2:B69697']) #data= [ #'湖北晓晓工贸有限公司', #'西安市依依扶贫开发有限公司', #'广州市顺涛机械租赁有限公司', #] # 可迭代对象 word_freq ={} for i in原创 2020-12-12 09:37:36 · 501 阅读 · 1 评论 -
每日10行代码81:计算反文档频率idf
以前使用以最小编辑距离为核心的算法来计算公司名称的相似度,发现有些结果还是不太理想,现在打算用tf-idf的思路来计算文本相似度。这次先计算出idf值。 #import jieba import math data=['武汉市华源达科技有限公司','武汉斯坦雷电气有限公司','武汉兴繁荣精密工业有限公司','杭州海康存储科技有限公司武汉研发中心','武汉市洪山区吴桥通用设备结构厂'] #data_split = [list(jieba.cut(i)) for i in data] #print(data_原创 2020-12-07 16:28:46 · 129 阅读 · 0 评论 -
每日10行代码64:python处理字符串里的同义词
背景: 本人最近在解决相似文本匹配的问题,具体点来说就是判断两个不一样的字符串在真实意义上是否是一样的。比如说’北京市海淀区海之蓝科技有限公司’ 和 ‘北京海淀海之蓝科技有限公司’ 指的是同一个公司, 但’北京海淀 海之蓝科技有限公司’ 和’北京海淀天之蓝科技有限公司’ 就不是一个公司。 在处理这个问题上,经常会遇到一些同义词,比如地名 “北京市” 和“北京”应该是一样的。我想到的办法是,把同义词全部换成标准化的词,比如把北京换成北京市,把海淀换成海淀区,然后再来比较两个名称,以减少不规范地名对原创 2020-11-05 06:44:44 · 492 阅读 · 6 评论