Zum analysieren von text in Sätze,
Ich bin versucht zu brechen, bis ein Absatz in Sätzen. Hier ist mein code bisher:
import java.util.*;
public class StringSplit {
public static void main(String args[]) throws Exception{
String testString = "The outcome of the negotiations is vital, because the current tax levels signed into law by President George W. Bush expire on Dec. 31. Unless Congress acts, tax rates on virtually all Americans who pay income taxes will rise on Jan. 1. That could affect economic growth and even holiday sales.";
String[] sentences = testString.split("[\\.\\!\\?]");
for (int i=0;i<sentences.length;i++){
System.out.println(i);
System.out.println(sentences[i]);
}
}
}
Wurden zwei Probleme gefunden:
- Der code splittet jederzeit kommt es zu einer Periode (".") symbol, auch wenn es eigentlich ein Satz. Wie kann ich dies verhindern?
- Jedem Satz, die split beginnt mit einem Leerzeichen. Wie lösche ich die redundant Platz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem, das Sie angesprochen haben, ist eine NLP - (Natural Language Processing) problem. Es ist gut zu schreiben, eine grobe Regel-engine, aber es könnte nicht skalieren und die Unterstützung full english text.
Haben einen tieferen Einblick und eine java-Bibliothek schauen Sie sich diesen link http://nlp.stanford.edu/software/lex-parser.shtml , http://nlp.stanford.edu:8080/parser/index.jsp und ähnliche Frage für
ruby
Sprache Wie Sie analysieren einen Absatz von text in Sätze? (perferrably in Ruby)zum Beispiel :
Die text -
nach dem tagging wird :
Prüfen, wie es zeichnet den Punkt (.) und die Zeit nach Dez. 31 ...
Die erste ist ein ziemlich schwieriges problem zu tun, richtig, da müsste man implementieren, Satz-Erkennung. Ich schlage vor, Sie tun das nicht, und nur einzelne Sätze mit zwei Leerzeilen nach einem Satzzeichen. Zum Beispiel:
Das zweite Problem kann gelöst werden, mit String.trim().
Beispiel:
Können Sie versuchen, verwenden Sie die
java.text.BreakIterator
Klasse für das Parsen von Sätzen. Zum Beispiel:BreakIterator
ist eine gute Idee, aber es leidet unter vielen die gleichen Arten von Problemen. Siehe diese Frage: stackoverflow.com/questions/17159513/...Trim es...
Angesichts der aktuellen input-format, es wird schwierig sein, aufgeteilt in Sätze. Sie haben zu verhängen, die einige Regel zusätzliche Regel zu identifizieren, die das Ende eines Satzes, zusätzlich zu der Zeit. Zum Beispiel könnte diese Regel "ein Satz endet mit einem Punkt(.) und zwei Räume". (Dies ist, wie die UNIX-Tools
grep
identifiziert Sätze.Können Sie die Klasse
SentenceSplitter
dieser open-source-Bibliothek hier.ersten Trim() den String... und nutzen Sie diesen link,
http://www.java-examples.com/java-string-split-example &http://www.rgagnon.com/javadetails/java-0438.html
- und Sie können auch verwenden, StringBuffer-Klasse... benutze einfach diesen link, ich hoffe, es wird Ihnen helfen,