首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到两个感官之间的路径长度?

如何找到两个感官之间的路径长度?
EN

Stack Overflow用户
提问于 2015-06-18 18:08:34
回答 1查看 169关注 0票数 0

我使用jaws-wordnet搜索,这是个新手。我正在寻找两个感官之间的概念距离,对于这个距离,我想知道两个感官之间的路径长度。

有人知道它是怎么计算的吗?在jaws中有这样的函数吗?

EN

回答 1

Stack Overflow用户

发布于 2015-06-18 19:10:35

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

然而,它的编程非常简单(sourceFormtargetForm是您想要计算hypernym-path-length的单词):

代码语言:javascript
复制
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的工作原理如下:

代码语言:javascript
复制
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;
}

免责声明:我还没有真正尝试过这段代码。它可能充满了打字错误...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30912416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档