В основном вам нужно сначала разделить блок текста на предложения. Это достаточно сложно, даже на английском языке, так как вам нужно следить за точками, вопросительными знаками, восклицательными знаками и любыми другими ограничителями предложений.
Затем вы обрабатываете одно предложение за раз после удаления всех знаков препинания (запятые, точки с запятой, двоеточия и т. Д.).
Затем, когда у вас останется массив слов, все становится проще:
for i = 1 to num_words-1:
for j = i+1 to num_words:
phrase = words[i through j inclusive]
store phrase
Все, довольно просто (после первоначального массирования текстового блока, который может не быть таким простым, как вы думаете).
Это даст вам все фразы из двух или более слов в каждом предложении.
Труднее всего будет разделение на предложения, разделение на слова, удаление знаков препинания и так далее, но я уже показал вам несколько простых начальных правил, которым нужно следовать. Остальное следует добавлять каждый раз, когда блок текста нарушает алгоритм.
Обновление:
В соответствии с запросом, вот некоторый код Java, который дает фразы:
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 ("==========");
}
}
который выводит:
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 []
==========
Теперь, имейте в виду, что это довольно простая Java (некоторые могут сказать, что это C написано на диалекте Java :-). Это просто для иллюстрации того, как вывести группы слов из предложения, как вы просили.
Он не выполняет все обнаружение необычных предложений и удаление пунктуации, о которых я упоминал в первоначальном ответе.