两个词之间的关系有同义、反义、近义(有多近?)、相关(有多相关?)等等。我们如何来判断两个词之间的关系呢?利用计算机能自动找出这种关系吗?当然可以,不仅能找出来,而且还能量化出有多近和有多相关。
本文描述了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、使用有道词典的定义
相关推荐
JAVA之hashmap源码分析Superword是Java开源项目,致力于研究英语单词分析和辅助阅读,包括但不限于拼写相似度,定义相似度,发音相似度,拼写转换规则,前缀和动态前缀,后缀以及动态后缀,词根,复合词,文本辅助...
基于VC++和MFC的一些优秀开源项目列表 包括7-Zip,eMule,FileZilla,MiKTeX,Nokia Composer等优秀项目,有兴趣的同行可以参考参考。
标题中提到的“潜规则”暗指开源软件世界中那些不成文但实际被广泛认同和遵守的规则。开源软件在定义上是公开源代码,允许用户自由使用、修改和共享的软件。在法律层面,开源软件主要通过各种开源许可证来规定其使用...
在Java的生态系统中,存在诸多著名的开源项目,这些项目各有特色,为Java开发人员提供了丰富的开发工具和应用架构。以下是对一些Java著名开源项目的详细介绍,它们分别在不同的开发领域中扮演着重要角色。 首先,...
2. **可重用性**:除了可配置性之外,规则引擎还应支持规则的复用,避免重复编写相似的规则逻辑。 3. **高性能**:高效的规则引擎能够在短时间内处理大量的数据和规则,确保系统的响应速度。 4. **易于集成**:...
原来的网上的开源项目很多都跑不起来,这个项目,经本人修改,经测试在android4.0系统上运行已经没问题,研究了下,发现对需要做视频通话的人来讲还是有很大帮助,特此贡献出来,供大家研究学习,压缩文件是在linux...
在 IT 领域,开源项目一直扮演着重要的角色,它们不仅推动了技术的发展,也为开发者提供了学习和实践的平台。对于游戏爱好者来说,GitHub 上有许多有趣的开源游戏项目,能够让我们深入了解游戏开发的过程,甚至参与...
PC远程登录手机 登录之后,必然涉及到按键的模拟等操作。 三个开源的软件一个是SmartDog Studio的Remote Control Add-on 另一个是Webkey 最后一个是Android自带monkey
GitHub开源项目SlidingMenu的类库,导入之后可以直接使用 教程地址:http://blog.csdn.net/yangyu20121224/article/details/9255829
【Java文件同步开源项目Sync】是一个基于Java语言开发的实用工具,主要目的是提供高效、可靠的文件和目录同步功能。这个开源项目为开发者提供了一个简单易用的命令行接口,允许用户方便地对本地或远程文件系统进行...
社区的贡献和支持是开源项目持续发展的重要驱动力,用户可以通过参与讨论、报告问题、提交修复或添加新功能来参与到项目中。 TDL的适用场景广泛,它可以用于API接口定义、数据库模式映射、协议解析等。通过TDL,...
硬件文档--FaceBook开源项目文档
定义:开源项目是指那些源代码公开,允许用户自由查看、修改、分发和使用的软件项目。 特点: 开放性:源代码对公众开放,任何人都可以查看和修改。 协作性:鼓励社区成员共同参与开发,促进技术创新和进步。 可定制...
每个源文件通常只有一个头文件,头文件中定义了函数声明和变量声明。源文件中包含实现代码。 注释风格 注释风格是指在代码中添加注释的方式。在 Google 的开源项目中,注释风格是非常重要的。注释应该简洁、明了,...
1. mini-cwmp-master:这个子项目基于gsoap库,gsoap是一个开源的SOAP(Simple Object Access Protocol)和XML(eXtensible Markup Language)工具包,用于在C和C++中生成跨平台的网络服务客户端和服务器。...
安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域
在“微软开源ASP.NET MVC项目”中,我们可以推测这可能是一个示例或模板项目,用于展示如何使用ASP.NET MVC框架来开发Web应用。这个项目可能是微软为了促进开发者对ASP.NET MVC的理解和使用而提供的资源。"Oxite...
GitHub上最火的40个Android开源项目源码,筛选了下,主要是把可以加到我们项目中的下了下来,这里有40个项目的描述,以及12个项目的源码,省的各位童鞋重复下载了,当然如果有童鞋需要其他的项目,我这里也给出了...