0
我使用jaws-wordnet搜索,並且對它來說是新的。我找到兩個感官之間的概念距離,我想知道兩個感官之間在上位詞方面的路徑長度。如何找到兩個感官之間的路徑長度?
有人知道它是如何計算的?下頜有什麼功能嗎?
我使用jaws-wordnet搜索,並且對它來說是新的。我找到兩個感官之間的概念距離,我想知道兩個感官之間在上位詞方面的路徑長度。如何找到兩個感官之間的路徑長度?
有人知道它是如何計算的?下頜有什麼功能嗎?
不,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;
}
免責聲明:我沒有真正嘗試過這個代碼。這可能是充滿錯別字...
非常感謝先生。但我有一些懷疑關於給出的答案1)什麼是在那裏使用的添加功能?它是內置的嗎? 2)那裏有什麼「n」? –
希望修正。我*確實*說我沒有測試過它... – tucuxi