Нет, JAWS не имеет встроенных функций для поиска того, что вы ищете.
Однако, это довольно простой программе (sourceForm
и targetForm
слова, которые вы хотите, чтобы вычислить hypernym-путь длины от):
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;
}
Отказ от ответственности: Я действительно не пробовал этот код. Вероятно, он заполнен опечатками ...
Спасибо alot sir.But у меня есть некоторые сомнения относительно данного ответа. 1) Что такое добавка, используемая там? Он встроен? 2) Что такое «n»? –
Надеюсь, исправлено. Я * сказал, что не проверял его ... – tucuxi