0

我使用jaws-wordnet 搜索并且是新手。我正在寻找 2 种感官之间的概念距离,我想知道 2 种感官之间的路径长度。

有人知道它是怎么计算的吗?下巴有什么功能吗?

4

1 回答 1

0

不,JAWS 没有内置函数来查找您要查找的内容。

但是,编程非常简单(sourceForm并且targetForm是您想要计算上位词路径长度的单词):

WordNetDatabase database = WordNetDatabase.getFileInstance();
// only looks at the first results, and they *must* be a NounSynsets
NounSynset src = (NounSynset)(database.getSynsets(sourceForm)[0]);
NounSynset dst = (NounSynset)(database.getSynsets(targetForm)[0]);

HashMap<NounSynset, Integer> srcHyper = findHypernymsRecursive(src, 0, null);
HashMap<NounSynset, Integer> dstHyper = findHypernymsRecursive(dst, 0, null);

srcHyper.keySet().retainAll(dstHyper.keySet()); // retain only common
int min = Integer.MAX_VALUE; 
for (NounSynset n : srcHyper.keySet()) {
     int d1 = srcHyper.get(n);
     int d2 = dstHyper.get(n);
     min = Math.min(min, d1+d2); // update min-distance
}
return min; // if empty intersection, Integer.MAX_VALUE

findHypernymsRecursive 的工作方式如下:

public static HashMap<NounSynset, Integer>
    findHypernymsRecursive(NounSynset s, int depth, HashMap<NounSynset, Integer> m) {
      if (m == null) m = new HashMap<NounSynset, Integer>();
      if ( ! m.containsKey(s)) {
          m.put(s, depth);
          for (NounSynset h : s.getHypernyms()) {
              findHypernymsRecursive(h, depth+1, m); 
          }
      }
      return m;
}

免责声明:我实际上并没有尝试过这段代码。应该是全是错别字...

于 2015-06-18T11:10:34.793 回答