superword开源项目中的定义相似规则

两个词之间的关系有同义、反义、近义(有多近?)、相关(有多相关?)等等。我们如何来判断两个词之间的关系呢?利用计算机能自动找出这种关系吗?当然可以,不仅能找出来,而且还能量化出有多近和有多相关。

本文描述了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、使用有道词典的定义

文章转载自 开源中国社区[https://www.oschina.net]

时间: 2024-08-04 11:24:29

superword开源项目中的定义相似规则的相关文章

开源项目中经常出现的七种错误

启动一个新的开源项目可能会遇到一些困难.也许你脑子里有一个很棒的想法,但是想把它们变成富有成效的.健康的.吸引人的社区还需要做很多工作.令人叹息的是,相同的错误总是被无代价的重复,出现低级错误是团队中的忌讳.下面就请跟随笔者一起,看看开源项目中经常出现的错误,并且尝试去规避它们.相信会对你的项目开发有所帮助. 1.聊天代替发送 在数以千计的开源项目中,有太多人因为松散的渠道.邮件列表问题或其它方面在一开始就陷入困境.讨论围绕着房子而展开,范围也越来越大,把许多不同的想法和考虑纳入其中.一个早期的

5个开源项目中常见的陷阱

提及开源,从软件.硬件以及理念已经越来越流行,应用形式也越发丰富.如果企业想开始一个新的开源项目,opensource网站提出的五个开源项目"陷阱"值得关注,同时即便是已经展开项目执行,通过了解无论在哪个阶段都可以有效.平稳的完成. 仅你自己支持 如果你计划发布一个开源产品,需要深刻理解"你需要的支持"的含义.不要指望社会各界来帮助你提供产品支持,每个人都会以为他们所做的事非常重要.得到千百万人的支持.同样不要指望大批社区志愿者会自发涌入你的支持论坛,帮你回答问题.

Palo Alto研究员称 未知攻击者使用恶意程序Dimnie攻击Github开发者 企图在开源项目中注入后门

过去几个月间,在GitHub网站上发布代码的开发者陆续遭到攻击,这些攻击都使用了一种鲜为人知却切实有效的网络间谍软件.攻击始于1月份,通过精心构造的恶意邮件吸引开发者注意,如请求他们为开发项目提供帮助或邀请他们参与有偿定制编程工作. 恶意邮件诱骗开发者下载恶意程序Dimnie 邮件中的.gz附件包含Word文档,其中嵌入了恶意宏代码.运行后,宏代码会执行PowerShell脚本,连接远程服务器,下载恶意程序Dimnie.根据Palo Alto Networks(PAN)研究员所说,Dimnie至

Google 在 47 个开源项目中发现了 1000 多个 bug

在过去五个月中,Google 的 OSS-Fuzz 计划已经在 47 个开源软件项目中发掘了超过 1000 个 bug . OSS-Fuzz 是 Google 在去年12月推出的一个开源安全计划,针对开源软件进行持续的模糊测试,利用更新的模糊测试技术与可拓展的分布式执行相结合,提高一般软件基础架构的安全性与稳定性.项目结合了多种模糊测试技术/漏洞捕捉技术(即原来的libfuzzer)与清洗技术(即原来的 AddressSanitizer),并且通过 ClusterFuzz 为大规模可分布式执行提

我们在各种开源项目中发现的 10000 个 bug

为了改善我们的静态代码分析的方法论,以及改进我们的静态分析工具PVS-Studio,我们会定期地用他们验证各种各样的开源项目.我们找到了很多bug,事实证明,再牛的人也会拼写错误 / 注意力不集中,没有人能保证不犯错.即便是在Microsoft Code Contracts, Qt, Linux kernel, CryEngine, VirtualBox, LibreOffice, Firefox, Boost, Tor这些项目里,依旧如此.目前我们检测了262个项目,都是官方发布版!我们一共记

开源 学习-怎样参与到一个开源的项目中去?

问题描述 怎样参与到一个开源的项目中去? 本人是一名大四的学生,最近没有特别多的课程了,所以时间比较多,希望能够参与到一个适当的开源项目中去,能够学习到更多的东西.但是我目前还不了解,应该怎样去参与一个开源的项目中,希望得到大家的指教,谢谢大家了! 解决方案 可以在网络上找相关的群体加入,一般都会流下邮件等信息,比如说你可以在git.oschina.net中查找

值的关注的Java开源项目(原创)

项目|原创 值的关注的Java开源项目   名称 资料 概况 OFBiz http://ofbizchina.com:8080/ http://www.ofbiz.org/ https://ofbiz.dev.java.net/ OFBiz是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框架.     OFBiz最主要的特点是OFBiz提供了一整套的开发基于Java的web应用程序

《开源思索集》一“我们的开源项目”活动发起人——庄表伟专访

"我们的开源项目"活动发起人--庄表伟专访 开源思索集 1. 先来个自我介绍吧! 庄表伟,盛大创新院高级研究员.1997年毕业至今,始终战斗在编程的"第一线",2009年加入盛大创新院.一直致力于推广并服务开源,热爱社区,热衷参与各种社区的交流活动.对于开源的事业贡献度很低,目前稍微能够拿得出手的项目,是一个正在进行中的写作计划:<借助开源项目,学习软件开发>. 为什么要发起"我们的开源项目"活动? 这个活动,最初是因为即将召开的QC

Java的开源项目:简单介绍Log4J的使用

一.前言 Java的开源项目太多了,这种遍地开花的局面绝对赶得上中国五代十国时期的"百家争鸣"."百花争艳"的繁荣.使用java技术,我们的项目几乎不需要购买有关java支撑开发产品,只需把一个一个开源产品经过架构师的手,合理搭配和拼接,就能做出灵活性佳.性能不错的商业产品来. 无疑,作为一个流行的日志记录工具,Log4j是java开源项目中最闪亮的环节之一.笔者所见的java项目,十有八九都采用了Log4j,究其原因,我认为有以下几点: a)Log4j受大多数we