Grundsätzlich müssen Sie zuerst den Block des Textes in Sätze trennen. Das ist knifflig genug, sogar auf Englisch, da Sie nach Punkten, Fragezeichen, Ausrufezeichen und anderen Satzabschlüssen Ausschau halten müssen.
Dann verarbeiten Sie jeweils einen Satz nach dem Entfernen aller Interpunktionszeichen (Kommas, Semikolons, Doppelpunkte usw.).
Dann, wenn Sie mit einer Reihe von Worten sind links, wird es einfacher:
for i = 1 to num_words-1:
for j = i+1 to num_words:
phrase = words[i through j inclusive]
store phrase
Das ist es, ziemlich einfach (nach anfänglichen Massieren des Textblockes, der nicht so einfach sein wie Sie denken).
Dies gibt Ihnen alle Sätze von zwei oder mehr Wörtern in jedem Satz.
Die Trennung in Sätze, die Trennung in Wörter, das Entfernen von Satzzeichen usw. wird das härteste Teil sein, aber ich habe Ihnen bereits einige einfache Anfangsregeln gezeigt. Der Rest sollte jedes Mal hinzugefügt werden, wenn ein Textblock den Algorithmus durchbricht.
Update:
Wie gewünscht, hier einige Java-Code, der die Sätze gibt:
public class testme {
public final static String text =
"My username is click upvote." +
" I have 4k rep on stackoverflow.";
public static void procSentence (String sent) {
System.out.println ("==========");
System.out.println ("sentence [" + sent + "]");
// Split sentence at whitspace into array.
String [] sa = sent.split("\\s+");
// Process each starting word.
for (int i = 0; i < sa.length - 1; i++) {
// Process each phrase.
for (int j = i+1; j < sa.length; j++) {
// Build the phrase.
String phrase = sa[i];
for (int k = i+1; k <= j; k++) {
phrase = phrase + " " + sa[k];
}
// This is where you have your phrase. I just
// print it out but you can do whatever you
// wish with it.
System.out.println (" " + phrase);
}
}
}
public static void main(String[] args) {
// This is the block of text to process.
String block = text;
System.out.println ("block [" + block + "]");
// Keep going until no more sentences.
while (!block.equals("")) {
// Remove leading spaces.
if (block.startsWith(" ")) {
block = block.substring(1);
continue;
}
// Find end of sentence.
int pos = block.indexOf('.');
// Extract sentence and remove it from text block.
String sentence = block.substring(0,pos);
block = block.substring(pos+1);
// Process the sentence (this is the "meat").
procSentence (sentence);
System.out.println ("block [" + block + "]");
}
System.out.println ("==========");
}
}
die Ausgänge:
block [My username is click upvote. I have 4k rep on stackoverflow.]
==========
sentence [My username is click upvote]
My username
My username is
My username is click
My username is click upvote
username is
username is click
username is click upvote
is click
is click upvote
click upvote
block [ I have 4k rep on stackoverflow.]
==========
sentence [I have 4k rep on stackoverflow]
I have
I have 4k
I have 4k rep
I have 4k rep on
I have 4k rep on stackoverflow
have 4k
have 4k rep
have 4k rep on
have 4k rep on stackoverflow
4k rep
4k rep on
4k rep on stackoverflow
rep on
rep on stackoverflow
on stackoverflow
block []
==========
Nun, bedenken Sie dies ziemlich einfach ist Java (einige könnte es C in einem Java-Dialekt geschrieben sagen :-). Es soll nur veranschaulichen, wie Wortgruppen aus einem Satz ausgegeben werden, wenn Sie danach gefragt haben.
Es tut nicht tun alle die ausgefallene Satzerkennung und Satzentfernung, die ich in der ursprünglichen Antwort erwähnte.
Aber was sind die Regeln, die diese Phrasen gebaut werden? – Gumbo
Wie es aussieht, sind es 2-3 aufeinander folgende Wörter ... – Tomalak
Natürliche Sprachverarbeitung == Welt des Schmerzes – Greg