скільки слів на букву «…»?
можливо ви колись бачили чи чули такий факт, що «в українській найбільше слів починаються на букву “п”». але я завжди до цього ставився скептично — бо жодних доказів чи іншої статистики подано не було. тому я написав невеличку програму на пітоні, яка проходить через великий електронний словник української мови та перелічує, скільки лем починаються на якусь букву. отже, ось сам код:
import re, locale
# відкриває список слів з лемами і тегами, а точніше ВЕСУМ (https://github.com/brown-uk/dict_uk/tree/master)
dictionary = open("C:\\Program Files\\Git\\dict_uk\\out\\dict_corp_lt.txt", "r")
# підготовлює список лем і таблицю частот слів
dictm = []
flfreq = {}
alphabet = list("абвгґдеєжзиіїйклмнопрстуфхцчшщьюя'")
# теги, які будуть ігноровані
badtags = {"foreign", # запозичення
"ua_1992", # старий правопис
"abbr", # абревіатури
"alt", # альтернативні форми
"intj", # вигуки
"prop" # власні назви
}
# бере кожне слово у словнику, ігнорує саме слово, але зберігає лему…
for line in dictionary.readlines():
# … лему бере сюди,…
lemma = line.strip().split(" ")[1]
# … теги — сюди,…
tags = line.strip().split(" ")[2].split(":")
# …, але якщо хоч один із тегів мені не подобається, ігнорує.
if not any(tag in badtags for tag in tags):
dictm.append(lemma.lower())
# словник слів тепер нам більше не треба
dictionary.close()
# конвертує список лем спочатку у множину (тобто видаляє дублікати), а потім знову у список
dictm = list(set(dictm))
# налаштовує сортування на українську мову (тобто на український порядок алфавіту).
locale.setlocale(locale.LC_ALL, "uk_UA.UTF-8")
# … і сортує за алфавітом
dictm.sort(key=locale.strxfrm)
# для кожної букви в алфавіті,…
for letter in alphabet:
# … спочатку налаштовує кількість слів на цю букву на 0 (бо ми ще нічого на цю букву не налічили),…
flfreq[letter] = 0
# (створює регулярний вираз для перевірки)
regex = "^"+letter+".*"
# …, а потім для кожного слова на цю букву додає 1
for word in dictm:
if re.match(regex, word):
flfreq[letter] += 1
else:
continue
# відкриває файл для зберігання результату …
output = open("output.txt", "w+")
# … і в нього записує букву та кількість слів на цю букву …
for item in flfreq:
output.write(f"{item}: {flfreq[item]}\n")
# … і цей файл нам теж більше не треба.
output.close()
а також його результат:
| буква | кількість |
|---|---|
| а | 10637 |
| б | 13388 |
| в | 33013 |
| г | 10598 |
| ґ | 331 |
| д | 15400 |
| е | 4963 |
| є | 719 |
| ж | 1856 |
| з | 26647 |
| и | 9 |
| і | 3974 |
| ї | 95 |
| й | 259 |
| к | 17074 |
| л | 5435 |
| м | 12000 |
| н | 28486 |
| о | 14907 |
| п | 60927 |
| р | 16098 |
| с | 24467 |
| т | 10597 |
| у | 7964 |
| ф | 5142 |
| х | 3566 |
| ц | 1754 |
| ч | 2928 |
| ш | 3868 |
| щ | 7054 |
| ь | 0 |
| ю | 290 |
| я | 4867 |
| ' | 1 |
стовпчикова діаграма
а ██████████▊10637
б █████████████▌13388
в █████████████████████████████████▏33013
г ██████████▋10598
ґ ▍331
д ███████████████▌15400
е █████4963
є ▊719
ж █▉1856
з ██████████████████████████▊26647
и ▏9
і ████3974
ї ▏95
й ▍259
к █████████████████▏17074
л █████▌5435
м ████████████12000
н ████████████████████████████▌28486
о ███████████████14907
п █████████████████████████████████████████████████████████████60927
р ████████████████▏16098
с ████████████████████████▌24467
т ██████████▋10597
у ████████7964
ф █████▎5142
х ███▋3566
ц █▉1754
ч ███2928
ш ███▉3868
щ ███████▏7054
ь 0
ю ▍290
я ████▉4867
' ▏1
із цікавого
- ну по-перше, так, все ж таки найбільше слів на «п».
- хвилинку… одне слово на апостроф?!
- це слово — «'дин», і як я це розумію, це скорочення від «один». чому воно його порахувало — я не знаю.
- 9 слів на «и»? які ж це?
- импонуючий, инокуючий, интерпеляція, инчий, иньший, ирій, ирод, истнуючий, ич.
- але ж альтернативні форми виключено!
- всі питання до укладача словника, тобто не до мене. а також, цей словник може редагувати будь-хто з дозволу і перевірки власника, тож ви можете виправити помилку — гірше від цього нікому не стане.
- але ж альтернативні форми виключено!
- импонуючий, инокуючий, интерпеляція, инчий, иньший, ирій, ирод, истнуючий, ич.