unpack_string/hw03_frequency_analysis/README.md

61 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Домашнее задание №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` используется в функции, а не уровне пакета - это плохо по следующим причинам:
* производительность: нет смысла компилировать регулярку каждый раз при вызове функции;
* функция не должна паниковать!
- При выполнении задания со звёздочкой забывают, что тире не должно являться словом.