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]))

结果:

代码中用到的停用词表在这里:
停用词表

知识融合中几种计算文本相似度的方法(代码)相关推荐

  1. python 文本相似度计算函数_四种计算文本相似度的方法对比

    作者:Yves Peirsman 编译:Bing 编者按:本文作者为Yves Peirsman,是NLP领域的专家.在这篇博文中,作者比较了各种计算句子相似度的方法,并了解它们是如何操作的.词嵌入(w ...

  2. createbitmap 旋转90度_Android Bitmap图片两种方案旋转90度的方法代码

    今天小编就为大家分享一篇Android开发图片水平旋转90度方法,角度可以自定义,这里的90只是举例,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧.Android两种 旋转Bitma ...

  3. 自然语言处理(NLP)之使用TF-IDF模型计算文本相似度

    自然语言处理(NLP)之使用TF-IDF模型计算文本相似度 所用数据集:ChnSentiCorp_htl_all.csv 语料库即存放稀疏向量的列表. 要注意的是,搜索文本text与被检索的文档共用一 ...

  4. 使用余弦相似度算法计算文本相似度-数学

    20211201 也就是效果 皮尔逊>余弦>欧式 余弦相似度的局限 皮尔逊的优势,相当于是改进版余弦相似度 欧式与 余弦 欧式侧重于直线距离 归一化之后的欧式和余弦的效果也不同 比如 0, ...

  5. NLP——计算文本相似度的常用算法

    文章目录 一.绪论 二.余弦相似度 2.1 余弦相似度定义 2.2 计算相似度步骤 2.3 举例 2.4 改进方式 2.5 代码 三.TF-IDF计算 3.1 TF.IDE.TF-IDF的计算方法 3 ...

  6. 使用simhash计算文本相似度

    1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 文本相似度计算常用于网页去重以及NLP里文本分析等 ...

  7. 使用余弦相似度计算文本相似度

    1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 2.向量余弦计算文本相似度 2.1 原理 余弦相似 ...

  8. 使用编辑距离计算文本相似度

    1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 3. 最小编辑距离计算文本相似度 3.1 编辑距离 ...

  9. 两种计算Java对象大小的方法

    之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...

最新文章

  1. python基础之生成器,生成器函数,列表推导式
  2. html5 canvas雨点打到窗玻璃动画
  3. webpack中跨域请求proxy代理(vue与react脚手架不同设置方法)
  4. Bootstrap table 行编辑导航
  5. ABBYY FineReader 12可以内置自动化任务吗
  6. 程序员如何跨越35岁危机?这篇给点干货建议!
  7. python--17个新手常见Python运行时错误
  8. linux下C调用lua的第一个程序
  9. 【编译原理笔记18】代码优化:活跃变量分析,可用表达式分析
  10. 计算机手机共享上网,上网教程_电脑wifi怎么实现手机共享上网 - 驱动管家
  11. 《Linux操作系统-系统移植》第4章 内核移植(IMX283+Linux3.14)
  12. HTTP的REST服务简介
  13. 「解读苏宁」30年门店数字化发展心法与实践分享
  14. 什么是驱动程序 在计算机中有何用途,电脑的驱动程序有什么作用
  15. Mybatis报错 :Error evaluating expression ‘condition.xxxx!= null ‘
  16. python查看微信撤回消息怎么弄_Python | 查看微信撤回的消息(完整代码)
  17. “梧桐杯”中国移动大数据应用创新大赛 - 智慧金融赛道Baseline
  18. 在附近小程序中展示你的小程序-微信小程序开发-视频教程21
  19. python if else 嵌套格式_python中if嵌套命令实例讲解
  20. Linux内核中的汇编语言

热门文章

  1. 手机投屏电视html,oppor17手机投屏电视的详细操作步骤
  2. {ResponseInfo:com.qiniu.http.Response@62bd765,status:400, reqId:d4kAAACMt2hWMSEW, xlog:X-Log, xvia:,
  3. IDA的详细使用指南以及核心功能讲解
  4. 穷人跨越阶层有多难?
  5. 弄懂这56个Python使用技巧,秒变Python大神!
  6. 奉上——手机版个人财务管理软件
  7. PV270R1K1T1NMMC派克柱塞泵_应用
  8. 不需要登录微信,发送消息python
  9. 真正手把手教你玩转Git
  10. php入门写法PHP入门基础之php代码写法