2016-04-21 10 views
0

Ich habe mit diesem Problem herausgekommen, dass ich keinen Weg finden konnte, diese Ausnahme zu lösen. Bitte hilf mir. Mein Programm versucht Substantive, Verben und Adjektive von einem gegebenen Satz des Benutzers herauszufinden (Hier habe ich gerade versucht, die Substantive herauszufinden). Wenn ich in meinem Programm Fehler gemacht habe, dann zeige bitte diese Fehler, damit ich sie korrigieren kann. Hier ist mein Code:Wie ich mit dieser ArrayIndexOutOfBoundException in diesem Substantiv-Finding-Programm umgehen

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); */ 
    } 

} 

Und die Ausgabe des Programms ist:

java.lang.ArrayIndexOutOfBoundsException: 1

Antwort

2

Sie haben:

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

Der letzte Index eines Arrays ist immer 1 kleiner als die Länge davon, da der erste Index 0 und nicht 1 ist. Daher ist lineArr[lineArr.length-1] der letzte Index.

Sie müssen i <= lineArr.length zu i < lineArr.length ändern.

Darüber hinaus beginnt i bei 1 und nicht 0. Wenn Sie dies tun, müssen Sie sicherstellen, dass Ihr Array mindestens zwei Elemente hat, die Sie nicht haben. Sie müssen dies auch ändern.

Endgültiges Ergebnis sollte sein:

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