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

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

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

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

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

textual
Листинг программы
            var rowsInLine = 60; 
            var dict = new Dictionary<string, List<int>>(); //создаем словарь ключ - слово, значение список страниц(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]).OrderBy(x => x.Key); //словарь сортируем по ключу(по словам в алфавитном порядке), группируем по первой букве(алфавитный указатель), еще раз сортируем(это излишне, когда писал, перестарался, лучше убрать, не мешает, но и лишняя работа ни к ченму)
            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())); //выводим ключ группы с выравниванием + количество записей в списке List + само содерживое списка через пробел, с удалением дублей
                }
            }
            Console.ReadKey(true); //the end, спасибо за внимание:)

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


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

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

14   голосов , оценка 4.071 из 5
Похожие ответы