【问题标题】:how can i get hypernyms of multiple words using java我如何使用java获取多个单词的上位词
【发布时间】:2018-04-25 05:08:45
【问题描述】:

我想在 java 中使用 WordNet 词典获取多个单词的“hypernyms”。

**什么是上位词?**具有广泛含义的词构成具有更具体含义的词所属的类别;一个上级。例如,颜色是红色的上位词。

所以如果我们有以下的话 1) 苹果
2) 香蕉
3) 肝炎
4) 树
5) 芒果

渴望的输出是 意义 1:

苹果:--(果皮为红色或黄色或绿色,果肉甜到酸脆的白色果肉)

=> 可食用的果实 --(种子植物的可食用生殖体,尤其是果肉甜的植物)

=> 农产品、绿色商品、绿色杂货、花园卡车——(为市场种植的新鲜水果和蔬菜)

=> 食物、固体食物——(任何用作营养来源的固体物质(与液体相反);“食物和饮料”)

=> 固体--(在常温常压下为固体的物质)

=> 物质,物质——(有质量占据空间的物质;“原子是最小的不可分割的物质单位”)

=> 物理实体——(具有物理存在的实体)

=> 实体 -- (被感知、已知或推断具有自己独特存在(有生命或无生命)的实体)

=> 果实 --(种子植物成熟的生殖体)

=> 生殖结构——(植物参与其繁殖的部分)

=> 植物器官——(植物或真菌的功能和结构单位)

=> 植物部分,植物结构——(植物或真菌的任何部分)

=> 自然物体 -- (自然产生的物体;不是人造的)

=>整体,单位——(被视为单个实体的部分组合;“与整体相比,该部分有多大?”;“团队是一个单位”)

=> 物体,物理物体——(有形可见的实体;可以投下阴影的实体;“里面装满了球拍、球和其他物体”)

=> 物理实体——(具有物理存在的实体)

=> 实体 -- (被感知、已知或推断具有自己独特存在(有生命或无生命)的实体)

=> pome, false fruit --(一种肉质的水果(苹果或梨或相关水果),有种子室和外部肉质部分)

=> 果实 --(种子植物成熟的生殖体)

=> 生殖结构——(植物参与其繁殖的部分)

=> 植物器官——(植物或真菌的功能和结构单位)

=> 植物部分,植物结构——(植物或真菌的任何部分)

=> 自然物体 -- (自然产生的物体;不是人造的)

=>整体,单位——(被视为单个实体的部分组合;“与整体相比,该部分有多大?”;“团队是一个单位”)

=> 物体,物理物体——(有形可见的实体;可以投下阴影的实体;“里面装满了球拍、球和其他物体”)

=> 物理实体——(具有物理存在的实体)

=> 实体 -- (被感知、已知或推断具有自己独特存在(有生命或无生命)的实体)

【问题讨论】:

  • 请澄清你的目标。这个问题似乎很抽象。
  • 先生,问题是我有一个字符串 s1,其中包含 5 个单词,苹果、芒果、香蕉、树和肝炎。我想在一个代码中获取所有单词的上位词。

标签: java arraylist wordnet hypernym


【解决方案1】:

什么是hypernyms?

答案: 一个具有广泛含义的词构成一个类别,具有更具体含义的词属于该类别;一个上级。例如,颜色是红色的上位词。

我正在列出用于提取上位词树的代码...它将为您提供 WordNet 3.0 字典中存在的任何单词的详细树。

调用这个方法

private static ArrayList<String> getHypernymTerm( PointerTargetNodeList ptnl,
                                                        ArrayList<String> parent2, String str )  
            throws JWNLException{
      ArrayList<String> parent = parent2;
      if ( !str.equals("entity") ) {
        for (Iterator<?> itr = ptnl.iterator(); itr.hasNext();) {
          PointerTargetNode node = (PointerTargetNode) itr.next();
          Synset synset = node.getSynset();
          String term = synset.getWord(0).getLemma();
          parent.add(term);
          PointerTargetNodeList targets = new PointerTargetNodeList(synset.getTargets(PointerType.HYPERNYM) );
      if (targets.size() > 0) {
            parent = getHypernymTerm( targets, parent, term);
            }
        }

      }
      return parent;
    }

首先您必须将单词存储在数组中,其余代码如下。如果有人需要整个代码,那么他/她可以通过我的邮箱与我联系 g.mail: nabeelraza174

        for(int a = 0 ; a < strArray.length ; a++){
            FRUIT[a] = Dictionary.getInstance().getIndexWord(POS.NOUN, hyp[a]);
        }

        for(int b = 0 ; b < FRUIT.length  ; b++){
            ArrayList<String> arrayList = new ArrayList<String>();
            arrayList.add(hyp[b]);

            PointerTargetTree printlist= demonstrateListOperation(FRUIT[b]);
            //printlist.print();
            PointerTargetNodeList ppt = printlist.getRootNode().getChildTreeList();
        string is ArrayList type
            ListClass temp = new ListClass();
            temp.string_list = getHypernymTerm(ppt, arrayList, hyp[b]);

【讨论】:

    【解决方案2】:

    可以使用Set来存储所有的上位词然后迭代。

    【讨论】:

      【解决方案3】:

      使用Wordnet。

      可以通过其Java API 使用Java 访问Wordnet。 在继续 API 之前,首先了解其门户网站上 wordnet 库的结构。

      【讨论】:

      • 我使用它,但它只用于一个单词,但我有多个单词存储在“字符串数组”中。我想获得所有使用循环的人的上位词。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2021-02-28
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多