Деление string на List>
Задание: В этом задании нужно реализовать метод в классе SentencesParserTask. Метод должен делать следующее: Разделять текст на предложения, а предложения на слова.
Считайте, что слова состоят только из букв (используйте метод char.IsLetter) или символа апострофа ' и отделены друг от друга любыми другими символами.
Предложения состоят из слов и отделены друг от друга одним из следующих символов .!?;:()
Приводить символы каждого слова в нижний регистр.
Пропускать предложения, в которых не оказалось слов.
Метод должен возвращать список предложений, где каждое предложение — это список из одного или более слов в нижнем регистре.
Ссылка на проект: Проект
Мой код:
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 шт):
Задача сводится к тому чтобы правильно разбить текст сначала на предложения, а потом на слова по заданным параметрам
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;
}
}
}