首页 > 代码库 > 近义词调研评估与代码实现(不断完善中…)

近义词调研评估与代码实现(不断完善中…)

 

   1.确定要解决的问题及意义

    在基于代码片段的分类过程中,由于程序员对数据变量名的选取可能具有一定的规范性,在某一特定业务处理逻辑代码中,可能多个变量名之间具有关联性或相似性(如“trade”(商品交易)类中,可能存在“business”,“transaction”,“deal”等同义词),在某些情况下,它们以不同的词语表达了相同的含义。因此,为了能够对代码片段做出更加科学的类别判断,更好地识别这些同义词,我们有必要寻找一种能够解决避免由于同义词的存在而导致误分类的方法。说白了,就是要去判断词语之间的相似度(即确定是否为近义词),并找出代码段中出现次数最多的一组语义。

 

 2.要达到的效果

即在给定的代码段中,能够发现哪些词是属于同义词,并且能够实现分类。

Eg.public static void function(){

     String trade=”money”;

     Int deal=5;

     Long long business=0xfffffff;

     Boolen transaction=TRUE;

     ……

}

Output:同义词有:trade,deal,business,transaction

这段代码很可能与trade有关

 

 3.初识WordNet

  问题确定了之后,通过网上的搜索,发现了WordNetword2vec这两个相关的词汇。(后知后觉,这本身就是一个找近义词的过程)

 

  3.1 WordNet是什么

  首先,来看WordNet。搜了一下相关介绍:

  WordNet是一个由普林斯顿大学认识科学实验室在心理学教授乔治·A·米勒的指导下建立和维护的英语字典。开发工作从1985年开始,从此以后该项目接受了超过300万美元的资助(主要来源于对机器翻译有兴趣的政府机构)。

  由于它包含了语义信息,所以有别于通常意义上的字典。WordNet根据词条的意义将它们分组,每一个具有相同意义的字条组称为一个synset(同义词集合)。WordNet为每一个synset提供了简短,概要的定义,并记录不同synset之间的语义关系。

  WordNet的开发有两个目的:

    它既是一个字典,又是一个辞典,它比单纯的辞典或词典都更加易于使用。

    支持自动的文本分析以及人工智能应用。

  WordNet内部结构

    在WordNet中,名词动词形容词副词各自被组织成一个同义词的网络,每个同义词集合都代表一个基本的语义概念,并且这些集合之间也由各种关系连接。(一个多义词将出现在它的每个意思的同义词集合中)。在WordNet的第一版中(标记为1.x),四种不同词性的网络之间并无连接。WordNet的名词网络是第一个发展起来的。

名词网络的主干是蕴涵关系的层次(上位/下位关系),它占据了关系中的将近80%。层次中的最顶层是11个抽象概念,称为基本类别始点(unique beginners),例如实体(entity,“有生命的或无生命的具体存在”),心理特征(psychological feature,“生命有机体的精神上的特征)。名词层次中最深的层次是16个节点。

                                                                                                                                                       (wikipedia)

         通俗地来说,WordNet是一个结构化很好的知识库,它不但包括一般的词典功能,另外还有词的分类信息。目前,基于WordNet的方法相对来说比较成熟,比如路径方法 (lch)、基于信息论方法(res)等。(详见参考文献)

 

    3.2 WordNet的安装与配置

有了WordNet ,也就等于是有了我们所要的单词库。所以,暂时先不考虑相似度的计算,把WordNet下载下来再说。

    参考http://hi.baidu.com/buptyoyo/item/f13dfe463c061e3afb896028。顺利地下载,安装以及跑demo。

    之后,一起来看一下WordNet的文件结构:

 

    bin目录下,有可执行文件WordNet 2.1.exe:

 

  

           可以看到,WordNet对所有的英文单词都进行的分类,并且形成了一棵语义树。在本例中,entity——>abstract entity——>abstraction——>attribute——>state——>feeling——> emotion——>love;

从叶子节点到根节点

    WordNet名次分类中的25个基本类:

 

dict目录里面存放的就是资源库了,可以看到,它以形容词,副词,名词,动词来分类:

 

doc为WordNet的用户手册文件文件夹

lib为WordNet软件使用Windows资源的函数库

src为源码文件夹

 

 4.解决问题的大致思路

我们首先以 WordNet 的词汇语义分类作为基础,抽取出其中的同义词,然后采用基于向量空间的方法计算出相似度。工作流程如下:

 

 5.基于WordNet的相似度计算

         以下摘自:《基于WordNet的英语词语相似度计算》

         5.1   特征提取

   

         5.2   意义相似度和词语相似度的计算

       

           

         

 

 

 

 

参考文献:

《基于维基百科的语义相似度计算》盛志超,陶晓鹏(复旦大学计算机科学技术学院);

《基于WordNet的英语词语相似度计算》颜伟,荀恩东(北京语言大学 语言信息处理研究所)

WordNet中的名词:http://ccl.pku.edu.cn/doubtfire/semantics/wordnet/c-wordnet/nouns-in-wordnet.htm