Домашнее задание №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)
При необходимости можно выделять дополнительные функции / ошибки.
(*) Дополнительное задание: учитывать большие/маленькие буквы и знаки препинания:
- "Нога" и "нога" - это одинаковые слова, "нога!", "нога", "нога," и " 'нога' " - это одинаковые слова;
- "какой-то" и "какойто" - это разные слова, "-" (тире) - это не слово.
Критерии оценки
- Пайплайн зелёный - 4 балла
- Добавлены новые юнит-тесты - до 4 баллов
- Понятность и чистота кода - до 2 баллов
- Дополнительное задание на баллы не влияет
Зачёт от 7 баллов
Подсказки
regexp.MustCompile
strings.Split
sort.Slice
Частые ошибки
regexp.MustCompile
используется в функции, а не уровне пакета - это плохо по следующим причинам:
- производительность: нет смысла компилировать регулярку каждый раз при вызове функции;
- функция не должна паниковать!
- При выполнении задания со звёздочкой забывают, что тире не должно являться словом.