В принципе, вам нужно сначала отделить блок текста от предложений. Это достаточно сложно, даже на английском, так как вам нужно искать периоды, вопросительные знаки, восклицательные знаки и любые другие терминаторы предложений.
Затем вы обрабатываете одно предложение за раз после удаления всех знаков препинания (запятые, полуколоны, двоеточия и т. Д.).
Затем, когда вы остаетесь с массивом слов, становится проще:
for i = 1 to num_words-1:
for j = i+1 to num_words:
phrase = words[i through j inclusive]
store phrase
Вот так, довольно просто (после первоначального массирования текстового блока, который может не быть как простой как ты думаешь).
Это даст вам все фразы из двух или более слов в каждом предложении.
Разделение на предложения, разделение на слова, удаление пунктуации и т. Д. Будет самым сложным, но я уже показал вам несколько простых начальных правил. Остальное нужно добавлять каждый раз, когда блок текста разбивает алгоритм.
Update:
В соответствии с просьбой, вот некоторые 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 :-). Это просто иллюстрирует, как выводить словарные группы из предложения по вашему желанию.
Это не сделать все причудливое определение предложения и пунктуацию, о котором я упоминал в первоначальном ответе.
Но каковы правила, которые эти фразы строят? – Gumbo
По внешнему виду, это 2-3 последовательных слова ... – Tomalak
Обработка естественного языка == мир боли – Greg