两个词之间的关系有同义、反义、近义(有多近?)、相关(有多相关?)等等。我们如何来判断两个词之间的关系呢?利用计算机能自动找出这种关系吗?当然可以,不仅能找出来,而且还能量化出有多近和有多相关。
本文描述了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等优秀项目,有兴趣的同行可以参考参考。
标题中的“BERT中文情感分类开源项目”指的是一个利用BERT预训练模型进行中文文本情感分析的开源项目。BERT,全称为Bidirectional Encoder Representations from Transformers,是Google在2018年提出的一种...
在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
NLP开源项目链接汇总,中英文的都有,包括分词,词性标注,注重算法介绍
社区的贡献和支持是开源项目持续发展的重要驱动力,用户可以通过参与讨论、报告问题、提交修复或添加新功能来参与到项目中。 TDL的适用场景广泛,它可以用于API接口定义、数据库模式映射、协议解析等。通过TDL,...
SSO开源项目,基于https的,大家可以在网上搜索研究一下!
### 一、开源项目的定义与价值 首先,我们需要明确开源项目的定义。开源软件是指遵循特定许可协议发布的源代码,允许用户自由查看、修改和分发这些代码。开源项目的价值不仅体现在技术层面,还体现在社区建设和创新...
定义:开源项目是指那些源代码公开,允许用户自由查看、修改、分发和使用的软件项目。 特点: 开放性:源代码对公众开放,任何人都可以查看和修改。 协作性:鼓励社区成员共同参与开发,促进技术创新和进步。 可定制...
每个源文件通常只有一个头文件,头文件中定义了函数声明和变量声明。源文件中包含实现代码。 注释风格 注释风格是指在代码中添加注释的方式。在 Google 的开源项目中,注释风格是非常重要的。注释应该简洁、明了,...
3. **Makefile**:定义了编译和链接bc的规则,用户可以通过运行"make"命令来编译整个项目。 4. **测试用例**:通常在"test"或"tests"目录下,用于验证bc的正确性和性能,开发者可以使用这些测试来确保改动没有引入...
开源C语言项目可以是教学示例,也可以是实际应用中的成熟项目,对于学习C语言的人来说,它们是宝贵的参考资料。 【标签】:虽然没有提供具体的标签,我们可以推测这个压缩包可能涉及到的关键词,如“C语言编程”、...
1. mini-cwmp-master:这个子项目基于gsoap库,gsoap是一个开源的SOAP(Simple Object Access Protocol)和XML(eXtensible Markup Language)工具包,用于在C和C++中生成跨平台的网络服务客户端和服务器。...
GitHub上最火的40个Android开源项目源码,筛选了下,主要是把可以加到我们项目中的下了下来,这里有40个项目的描述,以及12个项目的源码,省的各位童鞋重复下载了,当然如果有童鞋需要其他的项目,我这里也给出了...