我使用jaws-wordnet 搜索并且是新手。我正在寻找 2 种感官之间的概念距离,我想知道 2 种感官之间的路径长度。
有人知道它是怎么计算的吗?下巴有什么功能吗?
我使用jaws-wordnet 搜索并且是新手。我正在寻找 2 种感官之间的概念距离,我想知道 2 种感官之间的路径长度。
有人知道它是怎么计算的吗?下巴有什么功能吗?
不,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;
}
免责声明:我实际上并没有尝试过这段代码。应该是全是错别字...