Java - 使用Wordnet和JWI获取名词数组

时间:2012-07-05 20:03:58

标签: java wordnet jwi

关于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:所以我的问题是,如果有任何方法可以将字符串(单词)转换为Wordnet对象,那么我可以在其上使用getPOS()吗?

2 个答案:

答案 0 :(得分:1)

如果您使用其他库,您的方法将无法正常工作 - WordNet被设计为类固醇而非解析器的'字典/词库'。 Stanford Parser是寻找替代方案的好地方。

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

This应该让你入门(参见底部的例子)。查找名词,如果它没有回来,就丢弃它。

答案 1 :(得分:0)

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

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