Разделить предложение на слова, но возникли проблемы с пунктуации в C#
Я видел несколько подобных вопросов, но я пытаюсь добиться этого.
учитывая строку, str= " Луна - наш естественный спутник, то есть она вращается вокруг Земли!" Я хочу извлечь слова и сохранить их в массиве. Ожидаемыми элементами массива будут следующие.
the
moon
is
our
natural
satellite
i.e.
it
rotates
around
the
earth
Я попытался использовать String.split (', 't','r'), но это работает неправильно. Я также попытался удалить ., и другие знаки препинания, но я бы хотел, чтобы строка типа "I. E." была проанализирована слишком. Каков наилучший способ достичь этого? Я также попытался использовать regex.раскол безрезультатно.
string[] words = Regex.Split(line, @"W+");
наверняка оценил бы некоторые толчки в правильном направлении.
4 ответов
решение регулярное выражение.
(\b[^\s]+\b)
и если действительно хочу исправить это последнее .
on i.e.
вы можете использовать это.
((\b[^\s]+\b)((?<=\.\w).)?)
вот код, который я использую.
var input = "The moon is our natural satellite, i.e. it rotates around the Earth!";
var matches = Regex.Matches(input, @"((\b[^\s]+\b)((?<=\.\w).)?)");
foreach(var match in matches)
{
Console.WriteLine(match);
}
результаты:
The moon is our natural satellite i.e. it rotates around the Earth
Я подозреваю, что решение, которое вы ищете, намного сложнее, чем вы думаете. Вы ищете какую-то форму фактического анализа языка или, как минимум, словарь, чтобы определить, является ли точка частью слова или заканчивается предложением. Ты думал о том, что он может сделать оба?
рассмотрите возможность добавления словаря разрешенных " слов, содержащих знаки препинания.- Возможно, это самый простой способ решить вашу проблему.
это работает для меня.
var str="The moon is our natural satellite, i.e. it rotates around the Earth!";
var a = str.Split(new char[] {' ', '\t'});
for (int i=0; i < a.Length; i++)
{
Console.WriteLine(" -{0}", a[i]);
}
результаты:
-The
-moon
-is
-our
-natural
-satellite,
-i.e.
-it
-rotates
-around
-the
-Earth!
вы можете выполнить некоторую постобработку результатов, удаление запятых и точек с запятой и т. д.