要查找单词的同义词,我的代码如下。以下源代码存在一个问题;既然来自用户的话,我不知道它的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)
我将使用String类型中的单词代替" dog"但是,在运行时,我不知道它的POS类型。
我有第二个问题,在获得单词的同义词之前,我想检查它是否是英文单词,但JWI没有像isEnglish()或isInDictionary()这样的方法。我如何检查一个单词是否是英语,以便我避免查找非英语单词的同义词? (最终,提高表现)
答案 0 :(得分: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);
}
答案 1 :(得分:0)
让我们考虑一下。如果用户想要知道诸如&#39; bark&#39;之类的单词的同义词,那可以是名词或动词,那么您实际上需要向他显示所有结果。因此,用所有POS-es搜索IIndexWord是正确的。
如果在尝试所有POS后找不到特定的单词,那么您可以告诉用户它不存在。