2

为了找到一个词的同义词,我有下面的代码。以下源代码存在一个问题;由于来自用户的词,我不知道它的 POS 类型。因此,如果我不知道它的 POS 类型,我如何找到一个单词的 IIndexWord?

IIndexWord idxWord = dict . getIndexWord ("dog", POS. NOUN );
IWordID wordID = idxWord . getWordIDs ().get (0) ; // 1st meaning
IWord word = dict . getWord ( wordID );
ISynset synset = word . getSynset ();

for( IWord w : synset . getWords ())
 System .out . println (w. getLemma ());

我的方法的签名看起来像;

 void synonym(Strng word)

我将使用字符串类型的单词代替“狗”单词,但是在运行时,我不知道它的 POS 类型。

我有第二个问题,在得到一个单词的同义词之前,我想检查它是否是英文单词,但是 JWI 没有像 isEnglish() 或 isInDictionary() 这样的方法。如何检查一个单词是否是英语,以避免寻找非英语单词的同义词?(最终,提高性能)

4

2 回答 2

2

您可以对所有 POS 值使用一个简单的循环:

Set<String> lexicon = new HashSet<>();

for (POS p : POS.values()) {
    IIndexWord idxWord = dict.getIndexWord("name", p);
    if (idxWord != null) {
        System.out.println("\t : " + idxWord.getWordIDs().size());
        IWordID wordID = idxWord.getWordIDs().get(0);
        IWord word = dict.getWord(wordID);
        ISynset synset = word.getSynset();
        System.out.print(synset.getWords().size());
        for (IWord w : synset.getWords()) {
            lexicon.add(w.getLemma());
        }

    }
}

for (String s : lexicon) {
    System.out.println("wordnet lexicon : " + s);
}
于 2017-03-30T07:13:25.677 回答
0

让我们考虑一下。如果用户想知道像“bark”这样的词的同义词,它既可以是名词也可以是动词,你实际上需要向他展示所有的结果。因此,使用所有 POS-es 搜索 IIndexWord 是正确的。

如果在尝试所有 POS-es 后找不到特定单词,那么您可以告诉用户它不存在。

于 2014-08-18T13:28:24.607 回答