为了不被wordnet的API所限制,为了不用每次都拿着文档一个一个单位的比对,为了某某某的相似度计算不再计算的头昏眼花,为了我自己之后可能会用到wordnet。In a word,在如此强大的需求之下,我终于决定把wordnet的数据库文件解析出来,按照自己定义的模式保存在数据库中。——在这个过程中,第一次真实得感受到了传统关系数据库的局限性,不知道被热捧的XML数据库发展到什么程度了。
废话一堆,言归正传。接下来,首先将分别说一下总体的思路和wordnet数据库数据表模式的结构和关系,接着依照数据库生成的过程简单解析各张表格的结构,最后部分大概说说目前的使用以及可能的使用,包括一些纯属个人兴趣,和研究或项目没有任何关系的古怪想法。
1、总体思路和数据表模式
wordnet的数据文件分为两类:索引文件*.index和数据文件*.data。其中索引文件主要指定了某一个(字符串)单词所属的同义词集的集合,而数据文件其实是对每一个同义词集的详细解析,包括该同义词集包含的(字符串)单词,对应的周边关系和该同义词集的概念解析。
很自然的,考虑到了直接将一个数据文件映射到一个或者多个数据表上去。就是说数据文件和数据库表之间维护着单映射关系。由此,基于wordnet数据文件的结构分析,数据库的总体模式由四张表组成。分别为:索引文件*.index解析成index_term表,数据文件*.data由三张表组成,这里称之为一张主表加两张附表,主表synset主要保留了同义词集包含的词语和它自身的解析,另外两个表项relation_cnt和verb_frame_cnt分别标记该同义词集的关系数和动词组合结构数。为了最简化数据表的关系,主表和附表都是使用同义词集标记synset_id进行关联。
最终,数据表之间的模式关系可以参见下图一所示:
图一、数据库表模式关系图
2、数据库表格解析
index_term表保存了每一个(字符串)词语,以及所有所属同义词集的标记号。这里出现了刚才提到的问题,也就是关系数据库无法有效的表示这种大小可扩展的表项,在程序中synset表项可以使用一个不定长数组来表示,但是在数据库中就比较麻烦了。当然,设置好分割标记,将数组转换成字符串然后建立全文索引也是可以的,理论上来说是这样,但是这样保存的东西使用起来非常麻烦,而且也不直观。
synset表保存了一个同义词集的固有属性,表项中的index_word也是这么个问题。注意其中的relation_cnt项和verb_frame_cnt项,分别标记关系数量和动词组合结构数量。
这里假设分别要了解一个(字符串)词语和一个同义词集的相关信息,应该如何利用数据库最快的获取。
a)、(字符串)词语:首先以该词语w为查询条件在index_term表中获取它对应的所有同义词集的标记号,设为{id},——如果所属同义词集不只一个,那么根据具体情况决定是否要将w绑定到某一个id上。这样,这个问题就转化成获取某一个同义词集的相关信息,具体见a)部分;
b)、同义词集:给定一个同义词集,用它的标记号id作为查询条件在synset表中获取属于该同义词集的所有(字符串)词语。——(字符串)词语和同义词集之间是多对多的关系。如果relation_cnt项和verb_frame_cnt项不为0,说明该同义词集具有相关同义词集和动词组合结构(只有动词的这一项才可能不为0),分别以标记号id到relation表和verb_frame表查找出对应的关系对和组合结构。
注:verb_frame表,目前想不到会有什么用,只是为了边面以后重复解析,所以解析出来了,里面有些内容没有仔细去研究。先忽略之,等以后要用到的时候再去完善。
3、一些应用,包括但不限于,未完待续…
a)、概念相似度的计算:应该说,这个是最无聊,最笨蛋,最缺乏创意的应用,不得不承认,也是用的最多的,——我们都是笨蛋。这个就不说了,或者让某某来解释一下。下文是我们最终讨论的大致算法,和最后编程实现有一些偏差,供参考。
WORDNET相似度计算算法
1、使用关系:
同义关系,is-a关系,part-of关系
2、概念之间以同义集关系进行跳转。
如果两概念之间为同义集关系,则直接计算,
否则同义集之间的关系跳转使用is-a关系和part-of关系
3、概念深度的计算考虑三种选择:
一是单关系单向从根结点开始扫描;
二是两关系(is-a关系和part-of关系)单向从根结点开始扫描;
注意事项:
1、待测试的概念对可以指定所属同义集,也可不指定,此时用所有包含该概念的同义集集合作为待测概念;
2、深度计算是从根节点单向扫描,知道获得待测的两个概念为止;
——之后的想法都比较简单,大都还停留在思考阶段
b)、如果两个概念之间有多条路径,会发生什么?
c)、不同的路径模式之间有什么关系,比如单关系路径,混合关系路径?
d)、我们是不是可以开发一套单词记忆软件,基于同义词集的单词记忆,基于关系的联想记忆?
……
分享到:
相关推荐
wordnet1.2的安装文件,有时候在网上不易下载到,以前用的2.1的版本都能下到,现在只能下到这个的,留着吧。
3.8k实体,11个关系的知识图谱数据
WordNet英文版
ontology wordnet,本体,wordnet.owl,owl语言编写
WordNet 是一个包含大量英语词汇的词典数据库。名词、动词、形容词和副词被分组为认知同义词集(synsets),每个synset表示一个独特的概念。通过概念-语义和词汇关系,这些同义词集之间形成了一个相关词汇和概念的...
WordNet-2.1.tar.gz linux下的安装文件 最好的英文语义词典 最新版本
WordNet® is a large lexical database of English, developed under the direction of George A. Miller (Emeritus). Nouns, verbs, adjectives and adverbs are grouped into sets of cognitive synonyms ...
WordNet® is a large lexical database of English, developed under the direction of George A. Miller (Emeritus). Nouns, verbs, adjectives and adverbs are grouped into sets of cognitive synonyms ...
WordNet数据库 该项目将WordNet数据库文件打包到一个jar ,可以使用maven依赖项来依赖它。
有这个可以引入wordnet数据字典,这个也就是edu.smu.tspell.wordnet.*包
WordNet中采用语义网络作为词汇本体表达的基本方式,利用同义词集合(synonymy set)而不是词形(word form)来组织词汇。
wordnet开发实践需要的一个包,最新版,3.0,希望有帮助
WordNet的Java包 JWordNet
WordNet-InfoContent id: wordnet_ic; size: 12056682; author: ; copyright: ; license: ;
介绍了wordnet的基本结构以及运行原理
brief intro to wordnet structure
一个Ontology,用于推理机,OWL格式
WordNet的发展阶段和变化。当时的WordNet和经过10多年后今天的WordNet还是很不一样的。
WordNet Similarity 词语相似度 提供了多种计算方式
WordNet3.0是目前最新的版本。WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。