Frage

Ich habe dieses Stück Code geschrieben, die einen String und speichert sie in einer String-Array teilt: -

String[] sSentence = sResult.split("[a-z]\\.\\s+");

Allerdings habe ich hinzugefügt, um die [a-z], weil ich mit einigen der Abkürzung Problem befassen wollte. Aber dann, wie so mein Ergebnis zeigt sich: -

  

Darüber hinaus, wenn Everett versucht, sie in grundlegende Mathematik instruieren sie bewiesen unresponsiv

Ich sehe, dass ich das Muster in der Split-Funktion angegeben verlieren. Es ist in Ordnung für mich, die Zeit zu verlieren, aber die letzten Buchstaben des Wortes zu verlieren stört seine Bedeutung.

Könnte jemand mir helfen, mit dieser, und zusätzlich könnte mir jemand helfen mit mit Abkürzungen zu tun? Zum Beispiel, weil ich die Zeichenfolge basierend auf Perioden aufgeteilt, möchte ich nicht die Abkürzungen verlieren.

War es hilfreich?

Lösung

Sätze Parsing ist bei weitem nicht eine triviale Aufgabe sein, auch für lateinische Sprachen wie Englisch. Ein naiver Ansatz wie die, die Sie in Ihrer Frage umreißen wird oft genug nicht, dass es in der Praxis nutzlos erweisen wird.

Ein besserer Ansatz ist die Verwendung eines BreakIterator mit der rechten Locale konfiguriert.

BreakIterator iterator = BreakIterator.getSentenceInstance(Locale.US);
String source = "This is a test. This is a T.L.A. test. Now with a Dr. in it.";
iterator.setText(source);
int start = iterator.first();
for (int end = iterator.next();
    end != BreakIterator.DONE;
    start = end, end = iterator.next()) {
  System.out.println(source.substring(start,end));
}

Ergibt folgendes Ergebnis:

  1. Dies ist ein Test.
  2. Dies ist ein T.L.A. Test.
  3. Geben Sie nun mit einem Dr. drin.

Andere Tipps

Es wird schwierig sein, einen regulären Ausdruck zur Arbeit in allen Fällen zu bekommen, aber Ihr unmittelbares Problem zu beheben, können Sie einen Lookbehind verwenden:

String sResult = "This is a test. This is a T.L.A. test.";
String[] sSentence = sResult.split("(?<=[a-z])\\.\\s+");

Ergebnis:

This is a test
This is a T.L.A. test.

Beachten Sie, dass es Abkürzungen, die mit Großbuchstaben nicht, wie Abk beenden. Herr, etc ... Und es gibt auch Sätze, die in Perioden nicht am Ende!

Wenn Sie können, verwenden Sie eine natürliche Sprachverarbeitung Tool wie LingPipe . Es gibt viele Feinheiten, die sehr schwer zu fangen wird mit regulären Ausdrücken, zB ( zB :-)), Herr. , Abkürzungen , Auslassungs (...), und so weiter .

Es gibt eine sehr einfache Anleitung folgen auf Satzerkennung in der LingPipe Website.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top