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