## Домашнее задание №3 «Частотный анализ» Необходимо написать Go функцию, принимающую на вход строку с текстом и возвращающую слайс с 10-ю наиболее часто встречаемыми в тексте словами. Если слова имеют одинаковую частоту, то должны быть отсортированы **лексикографически**. * Словом считается набор символов, разделенных пробельными символами. * Если есть более 10 самых частотых слов (например 15 разных слов встречаются ровно 133 раза, остальные < 100), то следует вернуть 10 лексикографически первых слов. * Словоформы не учитываем: "нога", "ногу", "ноги" - это разные слова. * Слово с большой и маленькой буквы считать за разные слова. "Нога" и "нога" - это разные слова. * Знаки препинания считать "буквами" слова или отдельными словами. "-" (тире) - это отдельное слово. "нога," и "нога" - это разные слова. #### Пример ``` cat and dog, one dog,two cats and one man ``` Топ 7: - `and` (2) - `one` (2) - `cat` (1) - `cats` (1) - `dog,` (1) - `dog,two` (1) - `man` (1) При необходимости можно выделять дополнительные функции / ошибки. **(*) Дополнительное задание: не учитывать регистр букв и знаки препинания по краям слова:** * "Нога" и "нога" - это одинаковые слова, "нога!", "нога", "нога," и " 'нога' " - это одинаковые слова; * "какой-то" и "какойто" - это разные слова. * "dog,cat", "dog...cat", "dogcat" - разные слова * "-------" это слово * "-" словом не является ### Критерии оценки - Пайплайн зелёный - 4 балла - Добавлены новые юнит-тесты - до 4 баллов - Понятность и чистота кода - до 2 баллов - Дополнительное задание на баллы не влияет #### Зачёт от 7 баллов ### Подсказки - `regexp.MustCompile` - `strings.Split` - `strings.Fields` - `sort.Slice` ### Частые ошибки - `regexp.MustCompile` используется в функции, а не уровне пакета - это плохо по следующим причинам: * производительность: нет смысла компилировать регулярку каждый раз при вызове функции; * функция не должна паниковать! - При выполнении задания со звёздочкой забывают, что тире не должно являться словом.