Деление string на List>

Задание: В этом задании нужно реализовать метод в классе SentencesParserTask. Метод должен делать следующее: Разделять текст на предложения, а предложения на слова.

  1. Считайте, что слова состоят только из букв (используйте метод char.IsLetter) или символа апострофа ' и отделены друг от друга любыми другими символами.

  2. Предложения состоят из слов и отделены друг от друга одним из следующих символов .!?;:()

  3. Приводить символы каждого слова в нижний регистр.

  4. Пропускать предложения, в которых не оказалось слов.

Метод должен возвращать список предложений, где каждое предложение — это список из одного или более слов в нижнем регистре.

Ссылка на проект: Проект

Мой код:

using System;
using System.Collections.Generic;
using System.Text;

namespace TextAnalysis
{
    static class SentencesParserTask
    {
        public static List<List<string>> ParseSentences(string text)
        {
            var sentencesList = new List<List<string>>();
            string[] proposal = text.Split('.', '!', '?', ';', ':', '(', ')');

            for (int i = 0; i < proposal.Length; i++)
            {
                if (proposal[i] == "" || proposal[i] == null)
                    continue;
                var wordList = new List<string>();
                string resultLine = "";
                for (int g = 0; g < proposal[i].Length; g++)
                {
                    if (char.IsLetter(proposal[i][g]) || proposal[i][g].ToString() == "'")
                        resultLine = resultLine + proposal[i][g];
                    else
                    {
                        resultLine += " ";
                        continue;
                    }
                }
                resultLine = resultLine.ToLower();
                string[] wordArray = resultLine.Split(' ');
                foreach (string word in wordArray)
                    if (word != null && word != "")
                        wordList.Add(word);
                sentencesList.Add(wordList);
            }
            return sentencesList;
        }
    }
}

проходит простые тесты, но почему то упал на тесте из текстового файла Ошибка


Ответы (1 шт):

Автор решения: MrPrograMax

Задача сводится к тому чтобы правильно разбить текст сначала на предложения, а потом на слова по заданным параметрам

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace TextAnalysis
{
    static class SentencesParserTask
    {
        public static List<List<string>> ParseSentences(string text)
        {
            text = text.ToLower();

            var sentencesList = new List<List<string>>();
            var sepSen = new char[] { '.', '!', '?', ';', ':', '(', ')'};

            var sentences = text.Split(sepSen);

            foreach (var sentence in sentences)
            {
                var wordsList = GetWordsList(sentence);
                if (wordsList.Count> 0)
                    sentencesList.Add(wordsList);
            }
            
            return sentencesList;
        }

        private static List<string> GetWordsList(string sentence)
        {
            var wordsList = new List<String>();
            var sb = new StringBuilder();

            foreach (var symbol in sentence)
                sb.Append(Char.IsLetter(symbol) || symbol == '\''  ? symbol : ' ');

            var words = sb.ToString().Split(' ').ToList();

            foreach (var word in words)
            {
                if (!string.IsNullOrWhiteSpace(word))
                    wordsList.Add(word);
            }

            return wordsList;
        }
    }
}
→ Ссылка