两个词之间的关系有同义、反义、近义(有多近?)、相关(有多相关?)等等。我们如何来判断两个词之间的关系呢?利用计算机能自动找出这种关系吗?当然可以,不仅能找出来,而且还能量化出有多近和有多相关。
本文描述了superword开源项目中的定义相似规则,利用词的定义计算词和词之间的相似性。词的定义使用的是韦氏词典,同时也支持牛津词典。相似性算法使用的是word分词提供的10大相似性算法。
定义相似规则主要包括以下6步:
1、获取要计算的词的定义:
String wordDefinition = MySQLUtils.getWordDefinition(word, WordLinker.Dictionary.WEBSTER.name());
2、获取分级词汇,分级词汇的具体定义见这里:
Set<Word> words = (Set<Word>)application.getAttribute("words_"+request.getAttribute("words_type"));
3、获取分级词汇的定义,代码见这里:
List<String> allWordDefinition = MySQLUtils.getAllWordDefinition(WordLinker.Dictionary.WEBSTER.name(), words);
4、从word分词提供的10大相似性算法中任选一个,同时指定使用word分词提供的针对纯英文的分词器:
TextSimilarity textSimilarity = new CosineTextSimilarity(); textSimilarity.setSegmentationAlgorithm(SegmentationAlgorithm.PureEnglish);
5、计算相似性,返回最相似的100个单词:
int count = 100; Hits result = textSimilarity.rank(wordDefinition, allWordDefinition, count);
6、输出计算结果:
StringBuilder temp = new StringBuilder(); int i=1; temp.append("<table border=\"1\">\n"); for(Hit hit : result.getHits()){ String[] attrs = hit.getText().split("_"); String w = attrs[0]; StringBuilder definition = new StringBuilder(attrs[1]); for(int j=2; j<attrs.length; j++){ definition.append(attrs[j]).append("_"); } temp.append("<tr>"); temp.append("<td> ").append(i++) .append(". </td><td> ") .append(WordLinker.toLink(w)) .append(" </td><td> ") .append(definition) .append(" </td><td> ") .append(hit.getScore()) .append("</td><td> ") .append("<a target=\"_blank\" href=\"definition-similar-rule.jsp?word=" + hit.getText() + "&count=" + count + "&words_type=" + request.getAttribute("words_type") + "\">相似</a>") .append(" </td>\n"); temp.append("</tr>\n"); } temp.append("</table>\n"); htmlFragment = temp.toString();
计算效果如下图所示:
1、使用韦氏词典的定义
2、使用爱词霸的定义
3、使用有道词典的定义
相关推荐
因此我自己根据go语言中文社区提供的资料,还有互联网企业架构设计中的常见组件分类, 共精心挑选了100多个开源项目(项目不限于在github开源的项目), 分成以下十几个大类。 这个项目可以理解为互联网IT人打造的...
开源力量创始人程开源在开源力量公开课2013年度庆典上介绍了中国最早的开源项目协作社区灰狐的创建过程,以及灰狐的一些开源项目从发起到结束的过程。他认为开源是需要有游戏规则的,而这个规则的核心就是知识产权...
qt的开源项目源码qt的开源项目源码qt的开源项目源码qt的开源项目源码
JAVA之hashmap源码分析Superword是Java开源项目,致力于研究英语单词分析和辅助阅读,包括但不限于拼写相似度,定义相似度,发音相似度,拼写转换规则,前缀和动态前缀,后缀以及动态后缀,词根,复合词,文本辅助...
C#开源项目信息汇总
。net开源项目。net开源项目。net开源项目。net开源项目。net开源项目。net开源项目。net开源项目
基于VC++和MFC的一些优秀开源项目列表 包括7-Zip,eMule,FileZilla,MiKTeX,Nokia Composer等优秀项目,有兴趣的同行可以参考参考。
android开源项目.rarandroid开源项目.rarandroid开源项目.rarandroid开源项目.rarandroid开源项目.rarandroid开源项目.rar
Java最著名的开源项目,开源项目介绍,简单的介绍,开拓视野。
常用阿里开源项目合集
目录 Qt官网下载/文档 Qt知名社区 Qt技术博客1 Qt开源框架 KDE/Qt Qt Github精品收藏1 -- IDE ...Qt sourceforge精品项目 Qt Git Client GUI Qt开发的大型开源软件 Qt开发环境搭建: Qt基础知识: C++学习书籍推荐:
“流行的c++语言开源项目”中列举了当下比较流行的c++开源项目,想开源码提升自己的可以看看。
20个Java开源项目源码打包下载,Java 是一种面向对象的编程语言,用于构建移动、桌面、Web 和嵌入式应用程序。
百度云自取,里面有90几套项目开源资源,没有整理过。
Activiti7的开源项目,用于二次开发!
Vue相关开源项目库汇总
Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目Moblin.org开源项目...
Python开源项目汇总,方便Python人员开发使用,找到属于自己的
开源web
GitHub开源项目SlidingMenu的类库,导入之后可以直接使用 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9255829