Частота слов в тексте - 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, спасибо за внимание:)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д