1

嗨朋友们,我正在为句子之间的语义相似性做最后一年的项目。所以我使用 word-net 2.1 数据库来检索含义。每行我都必须拆分单词。在每个单词中,我都获得了含义并将其存储到数组中。但它只能得到第一句话的含义。

 String[] sentences = result.split("[\\.\\!\\?]");
 for (int i=0;i<sentences.length;i++)
             {  
                 System.out.println(i);
              System.out.println(sentences[i]);
              int wcount1 = sentences[i].split("\\s+").length;
              System.out.println(wcount1);int wcount1=wordCount(w2);
            System.out.println(wcount1);
        String[] word1 = sentences[i].split(" ");
        for (int j=0;j<wcount1;j++){  
            System.out.println(j);

         System.out.println(word1[j]);
     }
          }

         IndexWordSet set = wordnet.lookupAllIndexWords(word1[j]); 
         System.out.println(set);
         IndexWord[] ws = set.getIndexWordArray(); 

         **POS p = ws[0].getPOS();///line no 103**

         Set<String> synonyms = new HashSet<String>();
         IndexWord indexWord = wordnet.lookupIndexWord(p, word1[j]);
         Synset[] synSets = indexWord.getSenses();
         for (Synset synset : synSets)
         {
            Word[] words = synset.getWords();

            for (Word word : words)
            {
               synonyms.add(word.getLemma());
            }
         }
         System.out.println(synonyms);

输出:只有sentences[o](第一句单词的唯一含义......所有其他单词都没有循环......)它显示这个错误..

**java.lang.ArrayIndexOutOfBoundsException: 0
at first_JWNL.main(first_JWNL.java:102)**
4

1 回答 1

0

当你声明变量wcount1时,你在值中赋值:sentences[i].split("\\s+")..。然而,当您分配变量时word1,它被分配了sentences[i].split(" ")

是否有可能,因为您使用了两个正则表达式,第二个拆分(分配给word1变量)没有正确拆分?因此,当您访问值 ( System.out.println(word1[j]);) 时,它会抛出ArrayIndexOutOfBoundsException. 由于 的值wcount1可能大于 的长度word1

于 2013-02-13T06:44:03.077 回答