Определение частоты и расположения слов в документе - C#
Формулировка задачи:
Здравствуйте!Помогите пожалуйста с заданием, если можно с объяснениями)
Требуется: осуществить обработку текстового файла, содержащего некоторый
многостраничный текст. Будем считать, что одна страница текста состоит из 60 строк.
Результат обработки – текстовый файл, содержащий предметный указатель
встречающихся в тексте слов. В предметном указателе перечисляются слова в
алфавитном порядке. Для каждого слова указывается количество его вхождений в текст
и номера страниц, на которых встречается это слово. При формировании предметного
указателя, слова, начинающиеся с разных букв алфавита разделяются на группы:
А
a 120: 1 2 3 4 5 6 7 8 9 10 11 12
and 89: 1 2 3 6 8 9 12
apple 3: 7 9
B
bag 2: 11 12
big 7: 5 7 10
C
cake 1: 3
circle 3: 8 9
. . . и т.д.
Решение задачи: «Определение частоты и расположения слов в документе»
textual
Листинг программы
var rowsInLine = 60;
var dict = new Dictionary<string, List<int>>();
string[] line;
int countOfRows = 0;
using(var sr = new StreamReader(@"c:\c#\text.txt"))
while(!sr.EndOfStream)
{
line = sr.ReadLine().ToLower().Split(" ,.?!\'()\"".ToCharArray(),StringSplitOptions.RemoveEmptyEntries);
countOfRows++;
foreach(var word in line)
{
if(!dict.ContainsKey(word)) dict.Add(word, new List<int>() { countOfRows/rowsInLine + 1 });
else dict[word].Add(countOfRows/rowsInLine + 1);
}
}
var result = dict.OrderBy(x=>x.Key).GroupBy(x => x.Key[0]);
foreach(var group in result)
{
Console.WriteLine(group.Key.ToString().ToUpper());
foreach(var item in group)
{
Console.WriteLine(item.Key.PadRight(20,'.') + " " + item.Value.Count + ":" + string.Join(" ",item.Value.Distinct()));
}
}
Console.ReadKey(true);