本文共 1694 字,大约阅读时间需要 5 分钟。
两个词之间的关系有同义、反义、近义(有多近?)、相关(有多相关?)等等。我们如何来判断两个词之间的关系呢?利用计算机能自动找出这种关系吗?当然可以,不仅能找出来,而且还能量化出有多近和有多相关。
本文描述了superword开源项目中的定义相似规则,利用词的定义计算词和词之间的相似性。词的定义使用的是韦氏词典,同时也支持牛津词典。相似性算法使用的是word分词提供的10大相似性算法。
定义相似规则主要包括以下6步:
1、获取要计算的词的定义:
String wordDefinition = MySQLUtils.getWordDefinition(word, WordLinker.Dictionary.WEBSTER.name());
2、获取分级词汇,分级词汇的具体定义见这里:
Setwords = (Set )application.getAttribute("words_"+request.getAttribute("words_type"));
3、获取分级词汇的定义,代码见这里:
ListallWordDefinition = 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(""); temp.append("
").append(i++) .append(". | ") .append(WordLinker.toLink(w)) .append(" | ") .append(definition) .append(" | ") .append(hit.getScore()) .append(" | ") .append("相似") .append(" | \n"); temp.append("
计算效果如下图所示:
1、使用韦氏词典的定义
2、使用爱词霸的定义
3、使用有道词典的定义
文章转载自 开源中国社区[https://www.oschina.net]