知识融合中几种计算文本相似度的方法(代码)
1.余弦相似度
import numpy as np
import jieba
#读取停用词
def stopwordslist(filepath):stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords# 加载停用词
stopwords = stopwordslist("cn_stopwords.txt")def cosine_similarity(sentence1: str, sentence2: str) -> float:""":param sentence1: s:param sentence2::return: 两句文本的相识度"""seg1 = [word for word in jieba.cut(sentence1) if word not in stopwords]seg2 = [word for word in jieba.cut(sentence2) if word not in stopwords]word_list = list(set([word for word in seg1 + seg2]))#建立词库word_count_vec_1 = []word_count_vec_2 = []for word in word_list:word_count_vec_1.append(seg1.count(word))#文本1统计在词典里出现词的次数word_count_vec_2.append(seg2.count(word))#文本2统计在词典里出现词的次数vec_1 = np.array(word_count_vec_1)vec_2 = np.array(word_count_vec_2)#余弦公式num = vec_1.dot(vec_2.T)denom = np.linalg.norm(vec_1) * np.linalg.norm(vec_2)cos = num / denomsim = 0.5 + 0.5 * cosreturn simstr1="刘德华1961年9月27日出生于中国香港,籍贯广东新会,华语影视男演员、歌手、制片人、作词人。"
str2="华仔参加了安徽国剧盛典颁奖晚会"
str3= "华仔1961年9月27日出生于中国香港,籍贯广东新会,华语影视男演员、歌手、制片人、作词人。1981年出演电影处女作《彩云曲》"
sim1=cosine_similarity(str1,str2)
sim2=cosine_similarity(str1,str3)
print("sim1 :",sim1)
print("sim2:",sim2)
结果
sim1 : 0.5
sim2: 0.908248290463863
2.杰卡德
import jiebadef Jaccrad(model, reference): # terms_reference为源句子,terms_model为候选句子terms_reference = jieba.cut(reference) # 默认精准模式terms_model = jieba.cut(model)grams_reference = set(terms_reference) # 去重;如果不需要就改为listgrams_model = set(terms_model)temp = 0for i in grams_reference:if i in grams_model:temp = temp + 1fenmu = len(grams_model) + len(grams_reference) - temp # 并集jaccard_coefficient = float(temp / fenmu) # 交集return jaccard_coefficienta = "苹果(Apple Inc. )是美国一家高科技公司。由史蒂夫·乔布斯、斯蒂夫·盖瑞·沃兹尼亚克和罗纳德·杰拉尔德·韦恩(Ron Wayne)等人于1976年4月1日创立"
b = "苹果公司创立之初,主要开发和销售的个人电脑,截至2014年致力于设计、开发和销售消费电子、计算机软件、在线服务和个人计算机"
c = "红富士苹果吃起来很香甜"
jaccard_1 = Jaccrad(a,b)
jaccard_2 = Jaccrad(a,c)
print(jaccard_1)
print(jaccard_2)
结果
0.06896551724137931
0.022727272727272728
3.TFIDF
import jieba
from gensim import corpora,models,similarities
#读取停用词
def stopwordslist(filepath):stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]return stopwords# 加载停用词
stopwords = stopwordslist("cn_stopwords.txt")str1="重庆是一个好地方"
str2="重庆好吃的在哪里"
str3= "重庆是好地方"def gensimSimilarities(str1,str2):all_doc = []all_doc.append(str1)all_doc.append(str2)all_doc.append(str3)# 以下对目标文档进行分词,并且保存在列表all_doc_list中all_doc_list = []for doc in all_doc:doc_list = [word for word in jieba.cut(doc) if word not in stopwords]all_doc_list.append(doc_list)# 首先用dictionary方法获取词袋(bag-of-words)dictionary = corpora.Dictionary(all_doc_list)# 以下使用doc2bow制作语料库corpus = [dictionary.doc2bow(doc) for doc in all_doc_list]# 使用TF-IDF模型对语料库建模tfidf = models.TfidfModel(corpus)index = similarities.SparseMatrixSimilarity(tfidf[corpus], num_features=len(dictionary.keys()))sim = index[tfidf[corpus]]return simsim=gensimSimilarities(str1,str2)
print(sim)
结果
[[1. 0. 0.34624156]
[0. 1. 0. ]
[0.34624156 0. 1. ]]
4.编辑距离
import Levenshtein
a = "苹果(Apple Inc. )是美国一家高科技公司。由史蒂夫·乔布斯、斯蒂夫·盖瑞·沃兹尼亚克和罗纳德·杰拉尔德·韦恩(Ron Wayne)等人于1976年4月1日创立"
b = "苹果公司创立之初,主要开发和销售的个人电脑,截至2014年致力于设计、开发和销售消费电子、计算机软件、在线服务和个人计算机"
c = "红富士苹果吃起来很香甜"
Levenshtein.distance(a, b)
print(Levenshtein.distance(b,a))
print(Levenshtein.jaro(b, a))
print(Levenshtein.jaro_winkler(b,a))
print(Levenshtein.jaro_winkler(c,a)) #Jaro_Winkler编辑距离
结果
79
0.3993624772313297
0.5194899817850638
0.4018759018759019
5.bert-as-service
import numpy as np
from bert_serving.client import BertClient
bc = BertClient(ip='localhost')
topk = 3sentences = ['苹果(Apple Inc. )是美国一家高科技公司。由史蒂夫·乔布斯、斯蒂夫·盖瑞·沃兹尼亚克和罗纳德·杰拉尔德·韦恩(Ron Wayne)等人于1976年4月1日创立','苹果公司创立之初,主要开发和销售的个人电脑,截至2014年致力于设计、开发和销售消费电子、计算机软件、在线服务和个人计算机','红富士苹果吃起来很香甜','刘德华1961年9月27日出生于中国香港,籍贯广东新会,华语影视男演员、歌手、制片人、作词人','华仔参加了安徽国剧盛典颁奖晚会','华仔1961年9月27日出生于中国香港,籍贯广东新会,华语影视男演员、歌手、制片人、作词人。1981年出演电影处女作《彩云曲》']sentences_vec = bc.encode(sentences)
#print(sentences_vec)
test_vec = bc.encode(['华仔出生于中国香港,主演电影《拆弹专家》'])
#print(test_vec)
score = (np.sum(test_vec * sentences_vec, axis=1) / np.linalg.norm(sentences_vec, axis=1))/20
#score =np.linalg.norm(sentences_vec, axis=1) /np.sum(test_vec * sentences_vec, axis=1)
topk_idx = np.argsort(score)[::-1][:topk]
for idx in topk_idx:print('> %s\t%s' % (score[idx], sentences[idx]))
结果:
代码中用到的停用词表在这里:
停用词表
知识融合中几种计算文本相似度的方法(代码)相关推荐
- python 文本相似度计算函数_四种计算文本相似度的方法对比
作者:Yves Peirsman 编译:Bing 编者按:本文作者为Yves Peirsman,是NLP领域的专家.在这篇博文中,作者比较了各种计算句子相似度的方法,并了解它们是如何操作的.词嵌入(w ...
- createbitmap 旋转90度_Android Bitmap图片两种方案旋转90度的方法代码
今天小编就为大家分享一篇Android开发图片水平旋转90度方法,角度可以自定义,这里的90只是举例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧.Android两种 旋转Bitma ...
- 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度
自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...
- 使用余弦相似度算法计算文本相似度-数学
20211201 也就是效果 皮尔逊>余弦>欧式 余弦相似度的局限 皮尔逊的优势,相当于是改进版余弦相似度 欧式与 余弦 欧式侧重于直线距离 归一化之后的欧式和余弦的效果也不同 比如 0, ...
- NLP——计算文本相似度的常用算法
文章目录 一.绪论 二.余弦相似度 2.1 余弦相似度定义 2.2 计算相似度步骤 2.3 举例 2.4 改进方式 2.5 代码 三.TF-IDF计算 3.1 TF.IDE.TF-IDF的计算方法 3 ...
- 使用simhash计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 文本相似度计算常用于网页去重以及NLP里文本分析等 ...
- 使用余弦相似度计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 2.向量余弦计算文本相似度 2.1 原理 余弦相似 ...
- 使用编辑距离计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 3. 最小编辑距离计算文本相似度 3.1 编辑距离 ...
- 两种计算Java对象大小的方法
之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...
最新文章
- python基础之生成器,生成器函数,列表推导式
- html5 canvas雨点打到窗玻璃动画
- webpack中跨域请求proxy代理(vue与react脚手架不同设置方法)
- Bootstrap table 行编辑导航
- ABBYY FineReader 12可以内置自动化任务吗
- 程序员如何跨越35岁危机?这篇给点干货建议!
- python--17个新手常见Python运行时错误
- linux下C调用lua的第一个程序
- 【编译原理笔记18】代码优化:活跃变量分析,可用表达式分析
- 计算机手机共享上网,上网教程_电脑wifi怎么实现手机共享上网 - 驱动管家
- 《Linux操作系统-系统移植》第4章 内核移植(IMX283+Linux3.14)
- HTTP的REST服务简介
- 「解读苏宁」30年门店数字化发展心法与实践分享
- 什么是驱动程序 在计算机中有何用途,电脑的驱动程序有什么作用
- Mybatis报错 :Error evaluating expression ‘condition.xxxx!= null ‘
- python查看微信撤回消息怎么弄_Python | 查看微信撤回的消息(完整代码)
- “梧桐杯”中国移动大数据应用创新大赛 - 智慧金融赛道Baseline
- 在附近小程序中展示你的小程序-微信小程序开发-视频教程21
- python if else 嵌套格式_python中if嵌套命令实例讲解
- Linux内核中的汇编语言
热门文章
- 手机投屏电视html,oppor17手机投屏电视的详细操作步骤
- {ResponseInfo:com.qiniu.http.Response@62bd765,status:400, reqId:d4kAAACMt2hWMSEW, xlog:X-Log, xvia:,
- IDA的详细使用指南以及核心功能讲解
- 穷人跨越阶层有多难?
- 弄懂这56个Python使用技巧,秒变Python大神!
- 奉上——手机版个人财务管理软件
- PV270R1K1T1NMMC派克柱塞泵_应用
- 不需要登录微信,发送消息python
- 真正手把手教你玩转Git
- php入门写法PHP入门基础之php代码写法