【问题标题】:Java - Getting array of nouns with Wordnet and JWIJava - 使用 Wordnet 和 JWI 获取名词数组
【发布时间】:2012-07-05 20:03:57
【问题描述】:

我有一个关于 WordNet 和MIT JWI(用于访问 WordNet 的 Java API)的非常简单的问题:我将一个文件读入一个字符串数组,然后将其拆分为单词。如何使用getPOS() 获取仅包含名词的单独字符串数组?谢谢!

我尝试过的示例:

公开课测试{

public static void main(String[] args) {

    String sentence1 = "The cat ate the fish";

    String[] s1Split = sentence1.split(" ");

    String wnhome = "C:/Program Files/WordNet/2.1";
    String path = wnhome + File.separator + "dict";
    URL url = new URL("file", null , path); 
    IDictionary dict = new Dictionary(url);
    dict.open();


    for (int i = 0; i <s1.length; i++) {
                    //this is where I got confused, wanted to use something like:
                    //Word w = dict.getIndexWord(s1[i], ..) but I need a POS argument, 
                    //and I can't find another suitable method
                    //if w.getPOS() is a noun I would add it to a separate vector
    }

}

}

编辑:刚刚想到另一个 - 使用w = dict.getIndexWord(s1[i], POS.NOUN) 之类的东西是否可靠,如果名词不存在,w 将为空?这值得一试吗?

EDIT2:所以我的问题 atm 是否有任何方法可以将字符串(单词)转换为 Wordnet 对象,以便可以在其上使用 getPOS()?

【问题讨论】:

  • 这看起来不对。我认为您需要使用 dict.open() 的结果,对吗?迭代句子中的字符有什么用?
  • 也许你想要 sentence1.split(" ") ?
  • 是的,对不起,编辑了代码,它是 String[] s1Split = sentence1.split(" ");
  • 阅读 Javadoc - 一切尽在其中。如果没有找到则返回 null

标签: java wordnet jwi


【解决方案1】:

如果您使用另一个库,您的方法将无法正常工作 - WordNet 被设计为类固醇而不是解析器的“字典/词库”。斯坦福解析器是寻找替代方案的好地方。

也就是说,您可以对每个单词进行查找,但如果有单词既是名词又是动词,您将无法区分,因为您没有考虑语法。

This 应该可以帮助您入门(请参阅底部的示例)。查找一个名词,如果它没有返回,就丢弃它。

【讨论】:

    【解决方案2】:

    对于JWNL,它的工作原理如下,但不知道是否相同。

    如果我理解您的问题是获取 POS(词性标签)。为此,您必须使用其他工具,例如 Stanford Pos Tagger。但是,通过这种方式,您可以获得每个单词字符串的字符串,因此您必须从字符串格式的 POS 转换为 JWNL 的 POS 类中的 POS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多