2012-07-05 47 views
2

我有一个关于WordNet和MIT JWI(用于访问WordNet的Java API)的非常简单的问题:我将文件读入字符串数组中,并将其分解为单词。我怎样才能得到一个单独的字符串数组,只包含使用getPOS()的名词?谢谢!什么,我已经试过Java - 使用Wordnet和JWI获取名词阵列

例子:

公共类的测试{

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将是空的?这是否值得尝试?编辑2:所以我的问题atm会是如果有任何方法我可以将一个字符串(单词)转换成一个Wordnet对象,所以我可以使用getPOS()对其?

+0

增加了一个例子 – user573382 2012-07-05 20:55:13

+0

这看起来不对。我认为你需要使用dict.open()的结果,对吧?迭代句子中的字符有什么用处? – ControlAltDel 2012-07-05 21:00:35

+0

也许你想要sentence1.split(“”)? – ControlAltDel 2012-07-05 21:00:59

回答

1

如果您使用另一个库,您的方法不会工作 - WordNet被设计为类固醇而不是解析器的“词典/辞典”。斯坦福分析器是寻找替代品的好地方。这就是说,你可以对每个单词执行查找,但是如果有两个词都是名词和动词,你就不能区分,因为你不考虑语法。

This应该让你开始(见底部的例子)。做一个名词的查找,如果它不回来,就丢弃它。

0

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

如果我明白你的问题是获得POS(词性标签)。要做到这一点,你必须使用其他工具,如斯坦福Posger Tagger。但是通过这种方式,您可以为每个字符串获取一个字符串,因此您必须从字符串格式的POS转换为JWNL的POS类中的POS。