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

Easter79
• 阅读 587

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

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

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

2、使用爱词霸的定义

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

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

3、使用有道词典的定义

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

在线使用地址

点赞
收藏
评论区
推荐文章
kenx kenx
3年前
MySQL查询之内连接,外连接查询场景的区别与不同
前言我在写sql查询的时候,用的最多的就是where条件查询,这种查询也叫内连查询innerjoin,当然还有外连查询outerjoin,左外连接,右外连接查询,常用在多对多关系中,那他们区别和联系是什么呢?内连接innerjoin内连接最常用定义:1.连接结果仅包含符合连接条件的行组合起来作为结果集,参与连接的两个表都应该符合连接条件使用关键词:
Stella981 Stella981
3年前
NIO 看破也说破(四)—— Java的NIO
Java的NIO有selector,系统内核也提供了多种非阻塞IO模型,Java社区也出现了像netty这种优秀的NIO框架。Java的NIO与内核的阻塞模型到底什么关系,为什么Java有NIO的API还出现了netty这种框架,网上说的reactor到底是什么?本文通过分析代码,带你一步步搞清楚Java的NIO和系统函数之间的关系,以及Java
Wesley13 Wesley13
3年前
JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词
JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词,单词后面跟的是词频。superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律等等。(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgi
Stella981 Stella981
3年前
Django中模型层中ORM的多表操作
ORM的多表创建(一对一.一对多,多对多):1模型创建  实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(onetoone)出版商模型:出版
Wesley13 Wesley13
3年前
MongoDB里做表间关联
MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型。MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link)。那么何时Embed何时Link呢?那得看两个实体之间的关系是什么类型。一对一的关系:Embed,比如用户信息集合有Address字段,Address字段有省、市、县三个字段。在关
Stella981 Stella981
3年前
Hibernate利用关联关系操纵对象
Hibernate利用关联关系操纵对象数据对象之间关联关系有一对一、一对多及多对多关联关系。在数据库操作中,数据对象之间的关联关系使用JDBC处理很困难。本节讲解如何在Hibernate中处理这些对象之间的关联关系。本节使用到4个类,它们分别是Student(学生)、Card(学生证)、Group(班级)和Cou
Wesley13 Wesley13
3年前
R语言相关关系可视化函数梳理(附代码)
当考察多个变量间的相关关系时,通常将多个变量的两两关系以矩阵的形式排列起来,R提供了散点图矩阵、相关矩阵等多种可视化方案,囊括了众多函数。本文对R语言相关关系可视化的函数进行了初步梳理(全篇框架如下),后续大家可根据个人需求及函数功能择优选择。!ca2a37780049afa7173657f022b8b242bc816d00(https://yqfi
Stella981 Stella981
3年前
GRE必备神器superword
superword(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fysc%2Fsuperword)是一个Java实现的英文单词分析和辅助阅读开源项目,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律和辅助阅读等等。支持最权威的2部中文词典和9
Stella981 Stella981
3年前
Django多对多模型自定义中间媒介(through)在运行期的表现
使用自定义中间媒介来实现多对多关系的时候,主要的目的是在中间媒介中保存关系的特有属性。举个例子,比如学生与课程之间的关系就属于多对多的,而且当学生与课程建立关系之后随之还会产生附属的属性,如:成绩。如下例:<!lang:pythonclassStudent(models.Model):name
Wesley13 Wesley13
3年前
NoSQL与关系型数据库全面对比
我们总在说各种数据库的使用,以及各个数据库的优缺点,每个数据库都有自己的所擅长的领域,但选择什么样的数据库才是重点,那么问题来了,数据库到底是怎么划分的,有什么讲究呢?数据库大致分为两大类:关系型数据库和非关系型数据库关系型数据库顾名思义,就是表与表之间有关系,平时我们所用到的MSSQLServer、Oracle、M
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k