понедельник, 19 мая 2025 г.

Про частоту слогов в русских словах

А как Вы развлекаетесь в свободное время?

Когда-то давно я думала о том, как лучше обучать детей чтению. По моим наблюдениям, удобнее всего работать со складами (в понимании Зайцева, см. кубики Зайцева), но использовать не только и не столько кубики (просто потому что они занимают много места и или дорого стоят, или их долго делать самим, поверьте, ради одного-трех детей точно не стоит, если вы не школа, сад или другое учебное заведение, там нормально), а какие-то более простые штуки, например таблицы или карточки (просто бумажки на которых написаны склады - делается 2 минуты, надоело - выбросил, не хватило - дописал).

Но... не все склады так нужны на обучении на начальном этапе. Много ли слов Вы мне сейчас назовете, например, со складом "чэ" или "чя"? (вопрос с подвохом, узнаете почему ниже)

Но даже если не брать экзотичную экзотику "вю", "кы", "фэ" и "фя" тоже потребуются ребенку очень и очень не скоро и точно ни на первых этапах.

С чего же тогда начать?
Когда у меня было ну очень много свободного времени, я открыла сайт, где можно искать слова по определенному критерию и проверила 200 складов (все согласные со всеми гласными) на количество находимых слов.

Еще раз, я открыла сайт (не помню чем конкретно тогда пользовалась, например https://wordhelp.ru/) в котором можно найти все слова, содержащие "ма", потом "му", потом "ми" ну и так далее 200 раз и количество найденных слов записала в таблицу.

Вот что у меня получилось:

Здесь цветом выделена частота - красное = редко, зеленое = часто, желтое = средне.


Вот эти же данные немного в другом виде - каких букв больше.

Эта таблица лежит у меня довольно давно, чтобы она те потерялась и вдруг кому пригодится я решила написать этот пост. Но у же в процессе написания я поняла, что надо составить список по частоте и приложить его тоже. Делать это вручную, понятное дело, лень и долго и нет смысла. Тут понятно, что можно для экселя написать макрос (это внутреннее программирование к эксель), который выстроит их по порядку, но честно говоря и макрос писать немного лень, потому что я давно я их не писала уже. В принципе написать могу, но, поскольку пользуюсь ими редко они получаются маленько корявые и всё равно это минимум минут 30.

(тем, кому не интересны технические подробности, пропустите текст на темном фоне)

Но, мы же живем в век соцсетей, я пока что пользуюсь чаще дипсиком. Вот мой промт:

привет, у меня есть таблица в эксель 21 столбец (с V по AP) и 11 строк (с 1 по 11) в 1 строк и столбце V содержатся заголовки. Напиши макрос, который позволит составить список из 200 значений этой таблицы по возрастанию значений, в таком виде : "заголовок столбца" сцепить с "заголовок строки" - значение ячейки

Вот его ответ:

Sub SortTableValues()
    Dim ws As Worksheet
    Dim dataRange As Range
    Dim cell As Range
    Dim dataList() As Variant
    Dim i As Long, j As Long, k As Long
    Dim outputWs As Worksheet
    Dim lastRow As Long
    
    ' Указываем лист с данными (измените при необходимости)
    Set ws = ThisWorkbook.Sheets("Лист1") ' Замените на имя вашего листа
    
    ' Определяем диапазон данных (V1:AP11)
    Set dataRange = ws.Range("V1:AP11")
    
    ' Создаем временный массив для хранения данных
    ReDim dataList(1 To dataRange.Rows.Count * dataRange.Columns.Count, 1 To 2)
    
    k = 1
    
    ' Заполняем массив данными в формате "Значение - Заголовок"
    For i = 2 To dataRange.Rows.Count ' Начинаем со 2 строки (первая - заголовки)
        For j = 2 To dataRange.Columns.Count ' Начинаем со 2 столбца (первый - заголовки)
            If Not IsEmpty(dataRange.Cells(i, j).Value) Then
                dataList(k, 1) = dataRange.Cells(i, j).Value ' Значение ячейки
                dataList(k, 2) = dataRange.Cells(1, j).Value & " - " & dataRange.Cells(i, 1).Value ' Заголовки
                k = k + 1
            End If
        Next j
    Next i
    
    ' Сортируем массив по значениям (1 столбец)
    Call QuickSort(dataList, 1, k - 1, 1)
    
    ' Создаем новый лист для вывода (или очищаем существующий)
    On Error Resume Next
    Set outputWs = ThisWorkbook.Sheets("Отсортированные данные")
    If outputWs Is Nothing Then
        Set outputWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        outputWs.Name = "Отсортированные данные"
    Else
        outputWs.Cells.Clear
    End If
    On Error GoTo 0
    
    ' Записываем заголовки
    outputWs.Range("A1").Value = "№"
    outputWs.Range("B1").Value = "Элемент"
    outputWs.Range("C1").Value = "Значение"
    
    ' Выводим первые 200 значений (или меньше, если данных недостаточно)
    For i = 1 To Application.Min(200, k - 1)
        outputWs.Cells(i + 1, 1).Value = i
        outputWs.Cells(i + 1, 2).Value = dataList(i, 2)
        outputWs.Cells(i + 1, 3).Value = dataList(i, 1)
    Next i
    
    ' Форматируем вывод
    outputWs.Columns("A:C").AutoFit
    outputWs.Range("A1:C1").Font.Bold = True
    
    MsgBox "Готово! Отсортированные данные сохранены на листе '" & outputWs.Name & "'.", vbInformation
End Sub

' Быстрая сортировка (QuickSort) для двумерного массива
Sub QuickSort(arr, ByVal first As Long, ByVal last As Long, ByVal col As Long)
    Dim i As Long, j As Long
    Dim pivot As Variant, temp As Variant
    
    i = first
    j = last
    pivot = arr((first + last) \ 2, col)
    
    Do While i <= j
        Do While arr(i, col) < pivot And i < last
            i = i + 1
        Loop
        Do While arr(j, col) > pivot And j > first
            j = j - 1
        Loop
        
        If i <= j Then
            ' Меняем местами обе части массива
            temp = arr(i, 1)
            arr(i, 1) = arr(j, 1)
            arr(j, 1) = temp
            
            temp = arr(i, 2)
            arr(i, 2) = arr(j, 2)
            arr(j, 2) = temp
            
            i = i + 1
            j = j - 1
        End If
    Loop
    
    If first < j Then QuickSort arr, first, j, col
    If i < last Then QuickSort arr, i, last, col
End Sub

Как использовать:

  1. Откройте Excel и нажмите Alt + F11, чтобы открыть редактор VBA.

  2. Вставьте этот код в новый модуль (Insert → Module).

  3. Запустите макрос (F5 или через меню Run).

  4. Результат появится на новом листе "Отсортированные данные" в формате:

    • Столбец A: Порядковый номер

    • Столбец B: "Заголовок столбца - Заголовок строки"

    • Столбец C: Значение ячейки

Примечания:

  • Макрос берет данные из диапазона V1:AP11.

  • Если значений меньше 200, выведет все доступные.

  • Пустые ячейки игнорируются.

Нужно что-то изменить под ваши задачи? 😊


Раньше я просила помочь написать макрос у чата GPT, но чаще всего приходилось их допиливать, что не очень удобно, тут толи я лучше стала писать запросы, толи задача проще, но вставленный макрос сразу выдал нужный результат. Единственный минус, что склады он мне сделал в виде: " М - А", но это просто исправить Ctrl + H в экселе и ворде это замена, пишем, что нам надо заменить " - " (пробел тире пробел) на ничего и нажимаем "заменить все". Получаем список просто складов.

А вот и он, пользуйтесь на здоровье!

НИ 28686
РО 23640
КА 21740
НО 18635
РА 18439
ТО 16969
РИ 16140
ТИ 15420
ЛИ 14754
ЛО 13197
ТЕ 12787
КО 12227
РЕ 11459
ТА 11195
ЛЕ 11190
ВА 10647
НА 10351
ДИ 10317
НЕ 10129
ПО 10119
МЕ 10024
ЛА 9868
МА 9792
МИ 9342
МО 8669
ЦИ 8080
ВО 7411
СИ 7263
ПЕ 7056
ДЕ 7018
ГИ 6521
ДО 6451
ВЕ 6343
ЗА 6326
ПА 5931
ПИ 5818
ЗО 5660
ВИ 5384
ФО 5262
ГА 4957
ГЕ 4831
СА 4783
ГО 4768
СЕ 4726
СО 4705
ЗИ 4538
БЕ 4505
ФИ 4500
БО 4333
БИ 4118
БА 3993
КИ 3918
ДА 3913
ЦЕ 3462
ФЕ 3424
РУ 3227
ЧЕ 3076
КУ 3026
ЧА 2964
ЧИ 2925
ЦА 2861
ЩИ 2850
ХО 2654
СУ 2643
ТУ 2601
ФА 2522
ЛУ 2466
БУ 2368
ХИ 2123
КЕ 2081
ЖЕ 1854
ЛЯ 1752
ВЫ 1750
ХА 1739
ЛЮ 1611
ТЫ 1598
ШЕ 1588
МУ 1559
ЖИ 1558
ПУ 1511
ЗЕ 1478
ДУ 1460
ШИ 1419
ША 1334
ГУ 1203
ЩЕ 1175
РЫ 1145
ЖА 1135
РЯ 1013
НУ 970
НЯ 820
ФУ 815
НЫ 798
ВУ 719
СЫ 635
ХЕ 621
МЫ 572
ЗУ 571
ДЫ 525
ЛЁ 496
ЛЫ 485
ВЯ 428
ТЯ 410
ПЫ 406
ЧУ 400
ЗЫ 395
БЫ 349
ЧО 326
ЩА 320
СЯ 290
МЯ 290
ЖО 284
ШО 278
ШУ 271
ХУ 265
ТЮ 248
РЮ 240
ТЁ 239
ЦО 229
РЭ 221
РЁ 211
ЛЭ 209
ПЯ 209
ЖУ 198
ЧЁ 167
ДЁ 132
НЁ 131
ЗЯ 129
ЦЫ 122
ДЯ 105
ДЮ 104
БЮ 101
--------------------------------------
ВЁ 99
НЭ 96
НЮ 87
МЁ 86
ЖЁ 84
ЩУ 81
ТЭ 75
ЦУ 75
СЮ 72
ШЁ 70
КЮ 65
ДЭ 64
ЩЁ 63
МЭ 62
БЭ 58
БЯ 54
СЁ 54
МЮ 50
ЗЁ 50
ПЁ 49
ФЫ 46
ФЮ 43
ЗЮ 42
БЁ 39
ГЭ 34
КЫ 34
ВЮ 34
ХЭ 33
СЭ 31
КЭ 29
ШЮ 29
ЗЭ 24
ВЭ 24
ПЭ 21
ГЮ 20
КЁ 17
ПЮ 16
ЩО 15
ФЯ 13
ФЭ 13
КЯ 12
ЦЮ 11
ЖЮ 11
ФЁ 9
ХЫ 8
ГЫ 8
ШЭ 6
ХЯ 6
ЦЭ 5
ЦЯ 5
ШЯ 4
ГЯ 4
ХЮ 3
ЖЭ 3
ГЁ 2
ЖЯ 1
ЧЯ 1
ЩЯ 1
ЩЮ 0
ЩЭ 0
ЧЮ 0
ХЁ 0
ЦЁ 0
ШЫ 0
ЖЫ 0
ЩЫ 0
ЧЫ 0
ЧЭ 0

Сейчас просматривая всё это у меня самой возникают вопросы - а как же "ся", ведь оно в каждом втором глаголе!? Такого не может быть! Знаю, вижу. Я рассказала вам как этот список появился и почему, мне кажется, что для основы его вполне можно взять, а дальше каждый доработает под себя.

Какой вывод можно сделать? Из 200 складов около 70 скорее всего не встретятся ребенку, только начинающему читать и писать, можно их на начальном этапе смело опустить.

Наши любимки на начальном этапе это склады с А И О Е, ну это не удивительно. Но даже из них можно спокойно убрать "ща", "чо", "жо", "шо", "цо", "що". Ё и Ю можно оставить только в сочетании с Л, а про Э вообще первое время не говорить. 

Меня лично больше всех удивила Ы...поскольку "вы" "ры" и "ты" оказались достаточно частыми.

Вот тут можно СКАЧАТЬ таблицу складов в ворде для печати (там две таблицы - в первой с частотой 3000 и выше, во второй 300 и выше) https://disk.yandex.ru/i/UBfmZ-56BrOhWQ

А вот тут можно СКАЧАТЬ сам файл эксель с таблицей по частоте и графиками https://disk.yandex.ru/i/Fdw9h0FlOeDAqw

Пишите, если кто-то продвинется дальше в этом вопросе. Мне будет очень интересно!

Мы с Алисой, Дальяной и Миланой желаем вам счастья!