Частота слов в тексте - C#

Узнай цену своей работы

Формулировка задачи:

с файлом сам разберусь, как реализовать алгоритм?

Решение задачи: «Частота слов в тексте»

textual
Листинг программы
  1.             var rowsInLine = 60;
  2.             var dict = new Dictionary<string, List<int>>(); //создаем словарь ключ - слово, значение список страниц(string и List<int> соответственно
  3.             string[] line; //объявляем массив слов
  4.             int countOfRows = 0;
  5.             using(var sr = new StreamReader(@"c:\c#\text.txt")) //создаем стримридер(путь к файлу)
  6.                 while(!sr.EndOfStream) //пока наш экземпляр ридера не достиг конца потока:
  7.                 {
  8.                     line = sr.ReadLine().ToLower().Split(" ,.?!\'()\"".ToCharArray(),StringSplitOptions.RemoveEmptyEntries); //считываем строку из потока, переводим в нижний регистр, разбиваем на отдельные слова по массиву разделителей и убираем пустые вхождения
  9.                     countOfRows++;
  10.                     foreach(var word in line) //перебираем весь массив слов
  11.                     {
  12.                         if(!dict.ContainsKey(word)) dict.Add(word, new List<int>() { countOfRows / rowsInLine + 1 }); //если в словаре нету такого ключа, добавляем в словарь новую пару, ключ слово, значение новый список из одного эл-та - номера страницы...хотя, думаю, лучше все же номера строк заносить, потом можно будет переделать вывод на строки,абзацы,страницы,тома и т.д.:)
  13.                         else dict[word].Add(countOfRows / rowsInLine + 1); //если же значение есть, то добавляем в список еще одно значение
  14.                     }
  15.                 }
  16.             var result = dict.OrderBy(x => x.Key).GroupBy(x => x.Key[0]).OrderBy(x => x.Key); //словарь сортируем по ключу(по словам в алфавитном порядке), группируем по первой букве(алфавитный указатель), еще раз сортируем(это излишне, когда писал, перестарался, лучше убрать, не мешает, но и лишняя работа ни к ченму)
  17.             foreach(var group in result) //перебираем последовательность
  18.             {
  19.                 Console.WriteLine(group.Key.ToString().ToUpper()); //выводим ключ группы, в верхнем регистре
  20.                 foreach(var item in group) //перебираем уже саму группу
  21.                 {
  22.                     Console.WriteLine(item.Key.PadRight(20, '.') + " " + item.Value.Count + ":" + string.Join(" ", item.Value.Distinct())); //выводим ключ группы с выравниванием + количество записей в списке List + само содерживое списка через пробел, с удалением дублей
  23.                 }
  24.             }
  25.             Console.ReadKey(true); //the end, спасибо за внимание:)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы