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分词提供的针对纯英文的分词器:

1TextSimilarity textSimilarity = new CosineTextSimilarity(); 2textSimilarity.setSegmentationAlgorithm(SegmentationAlgorithm.PureEnglish);

5、计算相似性,返回最相似的100个单词:

1int count = 100; 2Hits result = textSimilarity.rank(wordDefinition, allWordDefinition, count);

6、输出计算结果:

1StringBuilder temp = new StringBuilder(); 2int i=1; 3temp.append("<table border=\"1\">\n"); 4for(Hit hit : result.getHits()){ 5    String[] attrs = hit.getText().split("_"); 6    String w = attrs[0]; 7    StringBuilder definition = new StringBuilder(attrs[1]); 8    for(int j=2; j<attrs.length; j++){ 9        definition.append(attrs[j]).append("_"); 10    } 11    temp.append("<tr>"); 12    temp.append("<td> ").append(i++) 13            .append(". </td><td> ") 14            .append(WordLinker.toLink(w)) 15            .append(" </td><td> ") 16            .append(definition) 17            .append(" </td><td> ") 18            .append(hit.getScore()) 19            .append("</td><td> ") 20            .append("<a target=\"_blank\" href=\"definition-similar-rule.jsp?word=" + hit.getText() + "&count=" + count + "&words_type=" + request.getAttribute("words_type") + "\">相似</a>") 21            .append(" </td>\n"); 22    temp.append("</tr>\n"); 23} 24temp.append("</table>\n"); 25htmlFragment = temp.toString();

计算效果如下图所示:

1、使用韦氏词典的定义

2、使用爱词霸的定义

3、使用有道词典的定义

在线使用地址

点赞
收藏

评论区

加载中...

相关推荐

MySQL查询之内连接,外连接查询场景的区别与不同

前言我在写sql查询的时候,用的最多的就是where条件查询,这种查询也叫内连查询innerjoin,当然还有外连查询outerjoin,左外连接,右外连接查询,常用在多对多关系中,那他们区别和联系是什么呢?内连接innerjoin内连接最常用定义:1.连接结果仅包含符合连接条件的行组合起来作为结果集,参与连接的两个表都应该符合连接条件使用关键词:

NIO 看破也说破(四)—— Java的NIO

Java的NIO有selector,系统内核也提供了多种非阻塞IO模型,Java社区也出现了像netty这种优秀的NIO框架。Java的NIO与内核的阻塞模型到底什么关系,为什么Java有NIO的API还出现了netty这种框架,网上说的reactor到底是什么?本文通过分析代码,带你一步步搞清楚Java的NIO和系统函数之间的关系,以及Java

JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词

JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词,单词后面跟的是词频。superword是一个Java实现的英文单词分析软件,主要研究英语单词音近形似转化规律、前缀后缀规律、词之间的相似性规律等等。(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgi

Django中模型层中ORM的多表操作

ORM的多表创建(一对一.一对多,多对多):1模型创建  实例:我们来假定下面这些概念,字段和关系作者模型:一个作者有姓名和年龄。作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(onetoone)出版商模型:出版

Typescript的interface、class和abstract class

interface,class,和abstractclass这3个概念,既有联系,又有区别,本文尝试着结合官方文档来阐述这三者之间的关系。1\.DeclarationMerging(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.stagingtypescri

MongoDB里做表间关联

MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型。MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link)。那么何时Embed何时Link呢?那得看两个实体之间的关系是什么类型。一对一的关系:Embed,比如用户信息集合有Address字段,Address字段有省、市、县三个字段。在关