superword開源項目中的定義類似規則

兩個詞之間的關係有同義、反義、近義(有多近?)、相關(有多相關?)等等。咱們如何來判斷兩個詞之間的關係呢?利用計算機能自動找出這種關係嗎?固然能夠,不只能找出來,並且還能量化有多近和有多相關。html

本文描述了superword開源項目中的定義類似規則,利用詞的定義計算詞和詞之間的類似性。詞的定義使用的是韋氏詞典,同時也支持牛津詞典。類似性算法使用的是word分詞提供的10大類似性算法。java

定義類似規則主要包括如下6步:git

一、獲取要計算的詞的定義:github

String wordDefinition = MySQLUtils.getWordDefinition(word, WordLinker.Dictionary.WEBSTER.name());

二、獲取分級詞彙,分級詞彙的具體定義見這裏web

Set<Word> words = (Set<Word>)application.getAttribute("words_"+request.getAttribute("words_type"));

三、獲取分級詞彙的定義,代碼見這裏算法

List<String> allWordDefinition = MySQLUtils.getAllWordDefinition(WordLinker.Dictionary.WEBSTER.name(), words);

四、從word分詞提供的10大類似性算法中任選一個,同時指定使用word分詞提供的針對純英文的分詞器:app

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

五、計算類似性,返回最類似的100個單詞:webapp

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

六、輸出計算結果:jsp

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();

計算效果以下圖所示:ui

一、使用韋氏詞典的定義

二、使用愛詞霸的定義

三、使用有道詞典的定義

在線使用地址

相關文章
相關標籤/搜索