Für eine Datei, die Sätze wie diese hat: (. Oo)Parsing mehrzeilige Sätze aus einer Datei regex
He O O
does O O
, O O
however O O
, O O
have B-MWE_LVC B-MWE_LVC_VERB
an I-MWE_LVC O
affair I-MWE_LVC B-MWE_LVC_NOUN
with O O
Clotho B-NE_PER O
, O O
the O O
youngest O O
aspect O O
of O O
Fate B-NE_MISC B-NE_MISC_SB
. O O
This O O
is O O
both O O
awkward O O
and O O
intriguing O O
to O O
Norton B-NE_PER O
since O O
her O O
past O O
is O O
his O O
future B-SENT_BOUND O
. O O
I basierend jeden Satz extrahieren möchten auf dem RegexMuster, die das Ende eines jeden Satzes markiert . Ich habe einige Code unten writen dies zu analysieren, aber einen Fehler
Exception in thread "main" java.lang.StringIndexOutOfBoundsException erhalten: String-Index außerhalb des Bereichs: -1 bei java.lang.String.substring (Unbekannt Quelle) bei com.gyan.siapp.coref.resolve.test.main (test.java:46)
Leitung 46 ist: builder.append (strLine.substring (0, strLine.indexOf (‘ ')));
Mein Code:
public static void main(String args[]) {
StringBuilder builder = new StringBuilder();
String folderPath ="C:/Users/Desktop/Data_And_Sentences/wiki50.iob";
Scanner file = null;
try
{
file = new Scanner(new File(folderPath));
}
catch (FileNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
List<String> sentences = new ArrayList<String>();
String strLine;
//Read File Line By Line
Pattern matchExp = Pattern.compile ("(.*?)(. O O)");
Matcher m = matchExp.matcher(strLine);
while (file.hasNext())
{
while (!m.find()){
builder.append(strLine.substring(0, strLine.indexOf(' ')));
builder.append(" ");
}
sentences.add(builder.toString());
}
System.out.println(sentences);
//return sentences;
}
Ist das der richtige Ansatz? Sollte ich eine andere Struktur als einen String Builder verwenden, um genügend Speicherplatz zu gewährleisten? Meine Vermutung ist, dass die gesamte Datei als eine Zeichenfolge gelesen wird, daher bekomme ich diese Ausnahme. Ist das richtig?
Nicht das Muster jedes Mal neu kompilieren, Sie müssen das nur einmal außerhalb der Schleife tun.Wenn Sie Hilfe benötigen, können Sie den vollständigen Stack-Trace bereitstellen und angeben, welche Anweisung in Ihrem Code die Ausnahme auslöst. –
@JimGarrison Bearbeitet Code nach Ihrer Empfehlung und haben die gesamte Fehlerbeschreibung zur Verfügung gestellt. Vielen Dank. – serendipity
Wollten Sie den Inhalt an 'builder' anhängen, wenn es eine Übereinstimmung gibt? Entfernen Sie '!' Dann, 'while (m.find()) {' –