Разделить текст на предложения в C # - PullRequest
7 голосов
/ 10 февраля 2011

Я хочу разделить текст на предложения.Предложение заканчивается на (точка) или?или же !затем следует один или несколько пробельных символов, а следующее предложение начинается с заглавной буквы.

Например:

Первое предложениеВторое предложение!

Как я могу это сделать?

Ответы [ 4 ]

29 голосов
/ 10 февраля 2011

Вы можете разделить регулярное выражение, соответствующее пустому пространству, с помощью вида сзади, который ищет терминаторы предложений:

string[] sentences = Regex.Split(input, @"(?<=[\.!\?])\s+");

Это разделит символы пробела и сохранит терминаторы в предложениях.

Пример:

string input = "First sentence. Second sentence! Third sentence? Yes.";
string[] sentences = Regex.Split(input, @"(?<=[\.!\?])\s+");

foreach (string sentence in sentences) {
  Console.WriteLine(sentence);
}

Вывод:

First sentence.
Second sentence!
Third sentence?
Yes.
5 голосов
/ 10 февраля 2011

Какие языки вы хотите поддерживать?Например, в тайском языке нет пробелов между словами и предложения разделяются пробелом.Так что, в общем, эта задача очень сложная.Также рассмотрим полезный комментарий Фредрика Мёрка.

Итак, сначала вам нужно определить набор правил, что такое «предложение».Тогда вы можете использовать одно из предложенных решений.

5 голосов
/ 10 февраля 2011

Попробуйте это ( MSDN )

char[] separators = new char[] {'!', '.', '?'};
string[] sentences1 = "First sentence. Second sentence!".Split(separators);
//or...
string[] sentences2 = "First sentence. Second sentence!".Split('!', '.', '?');
4 голосов
/ 10 февраля 2011

Вы пробовали String.Split()? Смотрите документы об этом здесь

...