我使用jaws-wordnet搜索,这是个新手。我正在寻找两个感官之间的概念距离,对于这个距离,我想知道两个感官之间的路径长度。
有人知道它是怎么计算的吗?在jaws中有这样的函数吗?
发布于 2015-06-18 19:10:35
不,JAWS没有内置的函数来查找您要查找的内容。
然而,它的编程非常简单(sourceForm和targetForm是您想要计算hypernym-path-length的单词):
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_VALUEfindHypernymsRecursive的工作原理如下:
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;
}免责声明:我还没有真正尝试过这段代码。它可能充满了打字错误...
https://stackoverflow.com/questions/30912416
复制相似问题