2016-04-21 3 views
0

この例外を解決する方法を見つけることができなかったこの問題が出てきました。助けてください。 私のプログラムは、与えられた文章から名詞、動詞、形容詞を検索しようとしています(ここでは、名詞を見つけようとしました)。プログラムでエラーが発生した場合は、それらのエラーを指摘してください。修正することができます。 ここに私のコードです:この名詞のプログラムでこのArrayIndexOutOfBoundExceptionを処理する方法

enter code here 

import java.io.FileInputStream; 
import java.io.InputStream; 
import java.util.HashSet; 
import java.util.Set; 

import opennlp.tools.cmdline.parser.ParserTool; 
import opennlp.tools.parser.Parse; 
import opennlp.tools.parser.Parser; 
import opennlp.tools.parser.ParserFactory; 
import opennlp.tools.parser.ParserModel; 
import opennlp.tools.util.ObjectStream; 

public class ParserTest { 

static Set<String> nounPhrases = new HashSet<>(); 
static Set<String> adjectivePhrases = new HashSet<>(); 
static Set<String> verbPhrases = new HashSet<>(); 
static String result; 
gui_demo gd = new gui_demo(); 
String line = practice.gui_demo.textField1.getText(); 
public ParserTest(String line) { 
    // TODO Auto-generated constructor stub 
} 


public ParserTest() { 
    // TODO Auto-generated constructor stub 
} 

//ObjectStream<String> lineArr = new PlainTextByLineStream(new StringReader(line)); 

String[] lineArr = line.split("."); 
public void getNounPhrases(Parse p) { 
    if (p.getType().equals("NN") || p.getType().equals("NNS") || p.getType().equals("NNP") || p.getType().equals("NNPS")) { 
     nounPhrases.add(p.getCoveredText()); 
     System.out.println(p.getCoveredText()); 
    } 

    if (p.getType().equals("JJ") || p.getType().equals("JJR") || p.getType().equals("JJS")) { 
     adjectivePhrases.add(p.getCoveredText()); 
     System.out.println(p.getCoveredText()); 
    } 

    if (p.getType().equals("VB") || p.getType().equals("VBP") || p.getType().equals("VBG")|| p.getType().equals("VBD") || p.getType().equals("VBN")) { 
     verbPhrases.add(p.getCoveredText()); 
     System.out.println(p.getCoveredText()); 
    } 

    for (Parse child : p.getChildren()) { 
     getNounPhrases(child); 
    } 
} 


public void parserAction() throws Exception { 
    try{ 
    InputStream is = new FileInputStream("en-parser-chunking.bin"); 
    ParserModel model = new ParserModel(is); 
    Parser parser = ParserFactory.create(model); 
    for(int i=1; i <= lineArr.length; i++){ 
    Parse topParses[] = ParserTool.parseLine(lineArr[i], parser , 1);  //getting Exception 

    for (Parse p : topParses){ 
     //p.show(); 
     getNounPhrases(p); 
    } 
    } 
    }catch(Exception e){ 
     System.out.print(e); 
    } 
} 
public static void main(String[] args) throws Exception { 

    new ParserTest().parserAction(); 
    result = "Nouns :" +nounPhrases.toArray(new String[nounPhrases.size()]);//+ "\n" + "Verbs:" + verbPhrases + "Adjectives:" + adjectivePhrases; 
    /*System.out.println("List of Noun Parse : "+nounPhrases); 
    System.out.println("List of Adjective Parse : "+adjectivePhrases); 
    System.out.println("List of Verb Parse : "+verbPhrases); */ 
    } 

} 

、プログラムの出力は次のとおりです。

java.lang.ArrayIndexOutOfBoundsException:1

答えて

2

あなたは持っている:

for(int i=1; i <= lineArr.length; i++) { 
    Parse topParses[] = ParserTool.parseLine(lineArr[i], parser , 1); 
} 

配列の最後のインデックスは、最初のインデックスが0であり、1ではないため、常に1よりも小さいです。したがって、lineArr[lineArr.length-1]が最後のインデックスです。

i <= lineArr.lengthi < lineArr.lengthに変更する必要があります。

さらに、i1で始まり、0で始まらない。これを行う場合は、配列に2つ以上の要素があることを確認する必要があります。これも変更する必要があります。

最終的な結果は次のようになります。

for(int i=0; i < lineArr.length; i++) { 
    Parse topParses[] = ParserTool.parseLine(lineArr[i], parser , 1); 
} 
関連する問題