Не могу решить простую задачу с ulearn.me на С# Практика «Парсер предложений» Написал Код ,но он не работает как надо не могу понять почему
using System;
using System.Collections.Generic;
//https://ulearn.me/course/basicprogramming/Praktika_Parser_predlozheniy__d41a27ad-a377-4fbd-ba1c-1bd761c69dd1
/*В этом задании нужно реализовать метод в классе SentencesParserTask. Метод должен делать следующее:
Разделять текст на предложения, а предложения на слова.
a. Считайте, что слова состоят только из букв (используйте метод char.IsLetter) или символа апострофа '
и отделены друг от друга любыми другими символами.
b. Предложения состоят из слов и отделены друг от друга одним из следующих символов .!?;:()
Приводить символы каждого слова в нижний регистр.
Пропускать предложения, в которых не оказалось слов.
Метод должен возвращать список предложений, где каждое предложение — это список из одного или более
слов в нижнем регистре.
*/
namespace TextAnalysis
{
static class SentencesParserTask
{
public static List<List<string>> ParseSentences(string text)
{
var sentencesList = new List<List<string>>();
var offerList = SplittingTextToSentences(text);
foreach (var sentence in offerList)
{
var wordList = SplittingTextToWord(sentence);
sentencesList.Add(wordList);
}
return sentencesList;
}
public static List<string> SplittingTextToSentences(string text)
{
var OfferList = new List<string>();
var arraySentences = text.Split('.', '!', '?', ':', ';', '(', ')','\"');
foreach(var sentence in arraySentences)
{
if (sentence != "")
OfferList.Add(sentence);
}
return OfferList;
}
public static List<string> SplittingTextToWord(string sentence)
{
var wordList = new List<string>();
var arrayWord = sentence.Split(' ', ',', '\"');
foreach (var word in arrayWord)
{
word.Trim(' ');
if (word != "")
{
string NewWord = DelRemovingСharacters(word);
wordList.Add(NewWord.ToLower());
}
}
return wordList;
}
public static string DelRemovingСharacters(string word)
{
string wordWithoutSigns = "";
for(int i = 0;i < word.Length; i++)
{
if (Char.IsLetter(word, i) || word[i]=='\'')
{
wordWithoutSigns+= word[i];
}
}
return wordWithoutSigns;
}
}
}
Ответы (1 шт):
Автор решения: Evgeny Tsebro
→ Ссылка
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TextAnalysis
{
static class SentencesParserTask
{
public static List<List<string>> ParseSentences(string text)
{
var listSentences = new List<List<string>>(); // Возвращаемый список
if (text == null) return null; //проверка на наличие текста
text = text.ToLower();
var sentences = text.Split(".:;?!()".ToCharArray(),//парсеный на предложения текст
StringSplitOptions.RemoveEmptyEntries);
foreach(var sent in sentences)
{
var listWords = new List<string>(); // Список для слов
var builder = new StringBuilder();
foreach (var ch in sent)
{
if (char.IsLetter(ch) || ch == '\'')
builder.Append(ch);
else
AddNotEmptyWord(builder, listWords);
}
AddNotEmptyWord(builder, listWords);
if (listWords.Count > 0)
listSentences.Add(listWords);
}
return listSentences;
}
public static void AddNotEmptyWord(StringBuilder builder,List<string> listWords)
{
if (builder.Length > 0)
{
listWords.Add(builder.ToString());
builder.Clear();
}
}
}
}