python余弦定理求角_python余弦定理计算相似度

python余弦定理求角_python余弦定理计算相似度coding utf 8 importjiebai analyseimpor resemble 计算两个句子的相似度 1 将输入的两个句子分词 2 求分词后两句子的并集 去重 3 计算两句子各自词频 4 求词频向量 5 套用余弦定理公式求出相似度余弦值越接近 1 就表明夹角越接近 0 度 也就是两个向量越相似 这就叫 余弦相似性

#-*- coding: utf-8 -*-

importjiebaimportjieba.analyseimportmathdefsentence_resemble():”’计算两个句子的相似度:

1,将输入的两个句子分词

2,求分词后两句子的并集(去重)

3,计算两句子各自词频

4,求词频向量

5,套用余弦定理公式求出相似度

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫”余弦相似性”

:return:”’str1=”我喜欢看电视,不喜欢看电影”str2=”我不喜欢看电视,也不喜欢看电影”

#结巴分词,得到去掉逗号的数组

str1 =jieba.cut(str1)

str1= “,”.join(str1)

str1_array= str1.split(“,”)

str1_array.remove(u”,”)

str2=jieba.cut(str2)

str2= “,”.join(str2)

str2_array= str2.split(“,”)

str2_array.remove(u”,”)#求分词后两句子的并集(去重)

all_array = list(set(str1_array+str2_array))

all=sorted(all_array)#计算两句子各自词频

str1_num_dic =num_count(str1_array)

str2_num_dic=num_count(str2_array)#套用余弦定理公式求出相似度

cos =resemble_cal(all,str1_num_dic,str2_num_dic)printcosdefnum_count(a):

d= {k: a.count(k) for k inset(a)}returnddefarticle_resemble():

all_key=set()

with open(“article_1.txt”,”r”) as f:

lines=f.readlines()

lines= “”.join(lines)

article1_dic=analyse_word(lines)for k,v inarticle1_dic.items():

all_key.add(k)

with open(“article_2.txt”,”r”) as f:

article2_lines=f.readlines()

article2_lines= “”.join(article2_lines)

article2_dic=analyse_word(article2_lines)for k,v inarticle2_dic.items():

all_key.add(k)

cos=resemble_cal(all_key,article1_dic,article2_dic)printcosdefresemble_cal(all_key,article1_dic,article2_dic):

str1_vector=[]

str2_vector=[]#计算词频向量

for i inall_key:

str1_count=article1_dic.get(i,0)

str1_vector.append(str1_count)

str2_count=article2_dic.get(i,0)

str2_vector.append(str2_count)#计算各自平方和

str1_map = map(lambda x: x*x,str1_vector)

str2_map= map(lambda x: x*x,str2_vector)

str1_mod= reduce(lambda x, y: x+y, str1_map)

str2_mod= reduce(lambda x, y: x+y, str2_map)#计算平方根

str1_mod =math.sqrt(str1_mod)

str2_mod=math.sqrt(str2_mod)#计算向量积

vector_multi = reduce(lambda x, y: x + y, map(lambda x, y: x *y, str1_vector, str2_vector))#计算余弦值

cos = float(vector_multi)/(str1_mod*str2_mod)returncos”’文章关键词提取”’

defanalyse_word(content):

zidian={}

return_dic={}#内容分词

fenci =jieba.cut_for_search(content)for fc infenci:if fc inzidian:

zidian[fc]+= 1

else:

zidian[fc]= 1topK=30

#关键词 比率

tfidf = jieba.analyse.extract_tags(content, topK=topK,withWeight=True)

stopkeyword= [line.strip() for line in open(‘stop.txt’).readlines()]for word_weight intfidf:if word_weight instopkeyword:continuefrequence= zidian.get(word_weight[0], ‘not found’)

return_dic[word_weight[0]]=frequencereturnreturn_dicif __name__==”__main__”:#比较两句子相似度

sentence_resemble()#比较两篇文章相似度

article_resemble()

文章样例详情查看 http://pan.baidu.com/s/1qXRIGUS

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214957.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午3:02
下一篇 2026年3月18日 下午3:02


相关推荐

  • Java.Utils:精确运算工具类

    Java.Utils:精确运算工具类packagecom.boob.common.utils;importjava.math.BigDecimal;/***@description:精确运算工具类*@author:boob*@since:2020/2/9*/publicclassMathUtils{publicMathUtils(){}/**…

    2022年7月16日
    20
  • Mac 终端命令行读写NTFS硬盘方法[通俗易懂]

    Mac 终端命令行读写NTFS硬盘方法[通俗易懂]1.插入移动硬盘后,先查看移动硬盘的名称:mount|grepntfs这里的MyPassport是我的移动硬盘,可以看到它实际位置是/dev/disk2s12.先把移动硬盘卸载sudoumount/dev/disk2s13.建立挂载点,并重新挂载,这里我还是把它挂载在Volumes目录下,并新建文件夹cd/VolumesmkdirMy\Passport/使用自带的mount_ntfs就可以完成挂载了。sudomount_ntf…

    2022年6月16日
    96
  • Plugin “GsonFormat“ is incompatible (supported only in IntelliJ IDEA).报错

    Plugin “GsonFormat“ is incompatible (supported only in IntelliJ IDEA).报错

    idea 2021年10月2日
    73
  • idea pycharm 2022.01 离线激活码_在线激活2022.02.16「建议收藏」

    (idea pycharm 2022.01 离线激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~9AAG1RZ8NI-eyJsaWNlb…

    2022年4月1日
    67
  • matlab计算基尼系数并分解_matlab斐波那契数列的第n项

    matlab计算基尼系数并分解_matlab斐波那契数列的第n项前两天想偷个懒在网上找了好久关于求基尼系数的现成公式,结果很令人失望,于是只好奋发图强自己动手啦。​开始之前还是先脑补一些什么是基尼系数?—————————————————————————————-​居民收入分配的差异程度,是当前人们所普遍关心的一个问题。收入分配差异的合理与否,一方…

    2022年10月13日
    6
  • kali的Ettercap(0.8.3.1)GUI界面中文化[通俗易懂]

    kali的Ettercap(0.8.3.1)GUI界面中文化[通俗易懂]前言:最近在学kali,学到了dns劫持,上的课老师也是讲了一部分功能,我在网上想找一下别的功能,却发现这个Ettercap居然是20年新版,并没有什么详细信息,我就心血来潮写这篇笔记,让自己以后在复习的时候可以更快的回顾,发出来也让大家一起进步。 启动方法 kali的终端中输入ettercap-G 启动界面 GUI界面 中间人攻击选项 其他选项 Targets Currenttargets Selecttargets

    2022年6月28日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号