Initial commit
This commit is contained in:
0
hw03_frequency_analysis/.sync
Normal file
0
hw03_frequency_analysis/.sync
Normal file
60
hw03_frequency_analysis/README.md
Normal file
60
hw03_frequency_analysis/README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
## Домашнее задание №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` используется в функции, а не уровне пакета - это плохо по следующим причинам:
|
||||
* производительность: нет смысла компилировать регулярку каждый раз при вызове функции;
|
||||
* функция не должна паниковать!
|
||||
- При выполнении задания со звёздочкой забывают, что тире не должно являться словом.
|
||||
11
hw03_frequency_analysis/go.mod
Normal file
11
hw03_frequency_analysis/go.mod
Normal file
@@ -0,0 +1,11 @@
|
||||
module github.com/fixme_my_friend/hw03_frequency_analysis
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/stretchr/testify v1.7.0
|
||||
|
||||
require (
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
|
||||
)
|
||||
13
hw03_frequency_analysis/go.sum
Normal file
13
hw03_frequency_analysis/go.sum
Normal file
@@ -0,0 +1,13 @@
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
6
hw03_frequency_analysis/top.go
Normal file
6
hw03_frequency_analysis/top.go
Normal file
@@ -0,0 +1,6 @@
|
||||
package hw03frequencyanalysis
|
||||
|
||||
func Top10(_ string) []string {
|
||||
// Place your code here.
|
||||
return nil
|
||||
}
|
||||
82
hw03_frequency_analysis/top_test.go
Normal file
82
hw03_frequency_analysis/top_test.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package hw03frequencyanalysis
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// Change to true if needed.
|
||||
var taskWithAsteriskIsCompleted = false
|
||||
|
||||
var text = `Как видите, он спускается по лестнице вслед за своим
|
||||
другом Кристофером Робином, головой вниз, пересчитывая
|
||||
ступеньки собственным затылком: бум-бум-бум. Другого способа
|
||||
сходить с лестницы он пока не знает. Иногда ему, правда,
|
||||
кажется, что можно бы найти какой-то другой способ, если бы он
|
||||
только мог на минутку перестать бумкать и как следует
|
||||
сосредоточиться. Но увы - сосредоточиться-то ему и некогда.
|
||||
Как бы то ни было, вот он уже спустился и готов с вами
|
||||
познакомиться.
|
||||
- Винни-Пух. Очень приятно!
|
||||
Вас, вероятно, удивляет, почему его так странно зовут, а
|
||||
если вы знаете английский, то вы удивитесь еще больше.
|
||||
Это необыкновенное имя подарил ему Кристофер Робин. Надо
|
||||
вам сказать, что когда-то Кристофер Робин был знаком с одним
|
||||
лебедем на пруду, которого он звал Пухом. Для лебедя это было
|
||||
очень подходящее имя, потому что если ты зовешь лебедя
|
||||
громко: "Пу-ух! Пу-ух!"- а он не откликается, то ты всегда
|
||||
можешь сделать вид, что ты просто понарошку стрелял; а если ты
|
||||
звал его тихо, то все подумают, что ты просто подул себе на
|
||||
нос. Лебедь потом куда-то делся, а имя осталось, и Кристофер
|
||||
Робин решил отдать его своему медвежонку, чтобы оно не пропало
|
||||
зря.
|
||||
А Винни - так звали самую лучшую, самую добрую медведицу
|
||||
в зоологическом саду, которую очень-очень любил Кристофер
|
||||
Робин. А она очень-очень любила его. Ее ли назвали Винни в
|
||||
честь Пуха, или Пуха назвали в ее честь - теперь уже никто не
|
||||
знает, даже папа Кристофера Робина. Когда-то он знал, а теперь
|
||||
забыл.
|
||||
Словом, теперь мишку зовут Винни-Пух, и вы знаете почему.
|
||||
Иногда Винни-Пух любит вечерком во что-нибудь поиграть, а
|
||||
иногда, особенно когда папа дома, он больше любит тихонько
|
||||
посидеть у огня и послушать какую-нибудь интересную сказку.
|
||||
В этот вечер...`
|
||||
|
||||
func TestTop10(t *testing.T) {
|
||||
t.Run("no words in empty string", func(t *testing.T) {
|
||||
require.Len(t, Top10(""), 0)
|
||||
})
|
||||
|
||||
t.Run("positive test", func(t *testing.T) {
|
||||
if taskWithAsteriskIsCompleted {
|
||||
expected := []string{
|
||||
"а", // 8
|
||||
"он", // 8
|
||||
"и", // 6
|
||||
"ты", // 5
|
||||
"что", // 5
|
||||
"в", // 4
|
||||
"его", // 4
|
||||
"если", // 4
|
||||
"кристофер", // 4
|
||||
"не", // 4
|
||||
}
|
||||
require.Equal(t, expected, Top10(text))
|
||||
} else {
|
||||
expected := []string{
|
||||
"он", // 8
|
||||
"а", // 6
|
||||
"и", // 6
|
||||
"ты", // 5
|
||||
"что", // 5
|
||||
"-", // 4
|
||||
"Кристофер", // 4
|
||||
"если", // 4
|
||||
"не", // 4
|
||||
"то", // 4
|
||||
}
|
||||
require.Equal(t, expected, Top10(text))
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user