python matchtemplate返回值相似度_Python基于wordnet实现词语相似度计算分析

本文介绍了如何使用WordNet来计算英语词汇的相似度。WordNet是一个基于认知语言学的英语词典,将单词按意义组织成网络。通过遍历同义词集合并计算路径相似度,可以得到词语间的相似度。代码示例展示了如何实现这一过程,包括数据加载、计算和保存结果。
摘要由CSDN通过智能技术生成

本文首发地址:

https://yishuihancheng.blog.csdn.net/article/details/98854135

欢迎大家去我的博客去看,感觉CSDN博客的阅读效果比这里的要好,包括:整体的布局、代码格式化等方面,阅读体验会好点。

6d0b826cc926a20454f2d245324f8bd6.png

这里从百度百科里面拿来关于“wordnet”的定义和介绍:

WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。它是一个覆盖范围宽广的英语词汇语义网。名词,动词,形容词和副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。WordNet包含描述概念含义,一义多词,一词多义,类别归属,近义,反义等问题,访问以下网页,可使用wordnet的基本功能http://wordnetweb.princeton.edu/perl/webwnwwordnet官网在这里:https://wordnet.princeton.edu/

鉴于wordnet本身的性质,我们想到了可以借助于同一词典网络的形式来计算词语之间的相似度,具体的实现很简单,核心的思想就是:同义词汇数据。具体的代码实现如下:

#!usr/bin/env python#encoding:utf-8from __future__ import division'''__Author__:沂水寒城功能: 基于 WordNet 的词语相似度计算分析''' import sysimport numpy as npimport pandas as pdfrom scipy import statsfrom nltk.corpus import wordnet as wnfrom sklearn.preprocessing import MinMaxScaler, Imputer reload(sys)sys.setdefaultencoding('utf-8')  def loadData(data='data.csv'): ''' 加载数据集 ''' data=pd.read_csv(data) word_list=np.array(data.iloc[1:,[0,1]]) self_sim_res=np.array(data.iloc[1:,[2]]) return word_list,self_sim_resdef calWordSimilarity(word_list,self_sim_res,res_path='wordnetResult.csv'): ''' 计算词语相似度 ''' self_sim_matrix=np.zeros( (len(self_sim_res),1)) for i,word_pair in enumerate(word_list): word1,word2=word_pair count=0 synsets1=wn.synsets(word1) synsets2=wn.synsets(word2) print 'synsets1: ',synsets1 print 'synsets2: ',synsets2 for synset1 in synsets1: for synset2 in synsets2: score=synset1.path_similarity(synset2) if score is not None: self_sim_matrix[i,0]+=score count+=1 else: pass self_sim_matrix[i,0]=self_sim_matrix[i,0]*1.0/count imputer=Imputer(missing_values='NaN', strategy='mean', axis=0) imputer_list=imputer.fit_transform(self_sim_matrix) scaler=MinMaxScaler(feature_range=(0.0,10.0)) imputer_list_scale=scaler.fit_transform(imputer_list) (coefidence,p_value)=stats.spearmanr(self_sim_res,imputer_list_scale) print 'coefidence: ',coefidence print 'p_value: ',p_value submitData=np.hstack((word_list,self_sim_res,imputer_list_scale)) (pd.DataFrame(submitData)).to_csv(res_path,index=False, header=["Word1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值