Разделить предложение на слова, но возникли проблемы с пунктуации в 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!
вы можете выполнить некоторую постобработку результатов, удаление запятых и точек с запятой и т. д.