在我的代码中,我将此方法称为“阻止”单词的预处理步骤:
public void getStem(String word)
{
WordnetStemmer stem = new WordnetStemmer( dict );
List<String> stemmed_words = stem.findStems(word, POS.VERB);
System.out.println( stemmed_words.get(0) );
}
通常一切都很好,如果它得到一个正常的词(我正在使用Java Wordnet接口来处理词干)。事情是 - &gt;我并不总能得到一个正常的词,有些事情我会得到isa
这是is
和a
的连词。在这种情况下,该方法将返回null
,我的程序将崩溃。我怎么能防范这个?
这就是我称之为代码的方式:
public Sentence(String verb, String object, String subject ) throws IOException
{
WordNet wordnet = new WordNet();
this.verb = verb;
this.object = object;
this.subject = subject;
wordnet.getStem( verb );
}
最终我想要阅读:
this.verb = wordnet.getStem( verb );
我曾经听说过使用null对象做某事,这是否适用?
我尝试了这个,但它没有用,但是我想做这样的事情:
public void getStem(String word)
{
WordnetStemmer stem = new WordnetStemmer( dict );
List<String> stemmed_words = stem.findStems(word, POS.VERB);
if( stemmed_words != null)
System.out.println( stemmed_words.get(0) );
else
System.out.println( word );
}
这是输出:
prevent
contain
contain
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0
at java.util.Collections$EmptyList.get(Collections.java:4454)
at inference_learner.WordNet.getStem(WordNet.java:76)
at inference_learner.Sentence.<init>(Sentence.java:23)
at inference_learner.RegEx.match_regex_patterns(RegEx.java:33)
at inference_learner.ReadFile.readFile(ReadFile.java:30)
at inference_learner.Main.main(Main.java:38)
答案 0 :(得分:1)
由于List
不是null
,List
为空,因此无法正常工作。
您必须像if (stemmed_words.size() > 0)
答案 1 :(得分:0)
试
if( stemmed_words != null && stemmed_words.size() > 0))
System.out.println( stemmed_words.get(0) );
else
System.out.println( word );
}