Колись давно я написав допис про пошук слів на клавіатурі, але в коментарях люди почали говорити про римування, створення програмии для підбору рими, попросили мене зробити таку програму, я погодився... Але як тоді я не мав часу її зробити, так і зараз не маю... :( Але все ж я трохи цікавився цією темою і хочу викласти дещо з того, що я дослідив, деякі свої думки, поради.


Проблема української бази слів

Для того, щоб створити хорошу програму римування крім знань в програмуванні потрібно також мати українську словникової базу і розумітись в римуванні та граматиці української мови. Якщо з останнім можна розібратись просто почитавши купу статтей, то з українськими словами важче...

В інтернеті немає сайту типу «На ось тобі база, ось документація, користуйся на здоров’я»... Принаймі я не знайшов... Але деякі варіанти звідки таку базу можна взяти я таки знайшов:

  1. Програма «Словники України» (тут є чудова база - близько 256 тис. слів (це я так розумію не враховуючи відмінків), всі частини мови, зі всіма відмінками, є наголоси)
  2. Програма «Lingvo» (є багато слів, позначено наголос)
  3. Словник із сайту Сеник Миколи (це просто txt-файлик із словами без відмінків, тут є 67215 слів)
  4. Словник із плагіна до Firefox для перевірки орфографії (97013 слів, і навіть з відмінюванням, але для закінчень тут вказують позначки, в яких ще треба розібратись)
  5. Словник із перевірки орфографії до редактора WinEdt (290616 слів і їх відмінків)

Якщо з останніми трьома пунктами все ясно - берем файлик і читаємо з нього слова, то з першими двома треба придумувати як ті слова добути з тих програм. І сенс щоб це робити є, тому що найкраща база українських слів є в програмі «Словники України». Було б дуже круто, якби вони відкрили доступ до своєї бази і дали документацію як нею користуватись... але вони такого не зроблять, бо це комерційний продукт. Я взагалі цього не одобряю, я вважаю, що українська мова належить народу, українцям, і не може бути платною.

Але не все так погано, оскільки програму можна скачати, то і словники звідти можна видерти, для цього потрібно лише попрацювати напильником... Я навіть пробував це зробити (обережно, технічна інформація).

Які є інструменти для римування зараз?

Наразі мені відомо 2 способи як можна шукати риму:

  1. Пошук слів на сайті Сеник Миколи
  2. Пошук вручну по словнику з WinEdt (складніший спосіб, але більший словник)

1. Пошук слів на сайті Сеник Миколи

Є чудовий інструмент для пошуку слів на сайті Сеник Миколи.

Хоч автор створював цей скрипт для пошуку слів для кросвордів, але ніщо нам не заважає використовувати його для пошуку слів для римування. Для пошуку можна використовувати регулярні вирази.

2. Пошук вручну по словнику WinEdt

Просто відкриваємо файл-словник із WinEdt і шукаємо слова простим пошуком. Дуже бажано ознайомитись з регулярними виразами, оскільки з їх допомогою можна краще знаходити потрібні слова. Розгляну декілька сценаріїв для пошуку:

Простий приклад. Ми придумали рядок:

Тихий сон на горах ходить,
і ...

Другий рядок нам треба додумати і потрібно підібрати риму до «ходить». Ми вирішили шукати слова що закінчуються на «одить», для цього складаємо вираз одить$ - тут знак долара позначає закінчення слова. Шукаємо, знаходимо слово «водить»

Трохи подумали як його застосувати і вийшов другий рядок:

За рученьку щастя водить.

Це дуже простий приклад, але насправді цього в 90% випадків достатньо щоб підібрати таку-сяку риму.

Складніший приклад. Нехай ми хочемо підібрати риму до слова «баскетбол», але чомусь ми вирішили, що перед-перед-перед-остання буква має бути голосна, а перед-перед-остання має бути приголосна, тобто закінчення має бути щось типу <голосна><приголосна>ол. Складаємо рег.вираз [аеєиіїйоуюя][бвгґджзклмнпрстфхцчшщ]ол$ , шукаємо, знаходимо такі слова: ідол, атол, укол, .., бусол, вузол, купол, лізол, .., хохол, чохол, диявол, етанол, .., богомол, валідол, .., волейбол .. і так далі.. Тепер ми захотіли щоб там було дві приголосні, шукаємо по виразу [аеєиіїйоуюя][бвгґджзклмнпрстфхцчшщ][бвгґджзклмнпрстфхцчшщ]ол$ знаходимо слова: .., янгол, .., камзол, ментол, монгол, .., футбол... Можливо є слова з трьома приголосними? Так, є 1 слово: гандбол. А щоб знайти всі ці слова ми могли з самого початку шукати по виразу [аеєиіїйоуюя][бвгґджзклмнпрстфхцчшщ][бвгґджзклмнпрстфхцчшщ]?[бвгґджзклмнпрстфхцчшщ]?ол$ - знак питання означає що буква може бути а може й не бути. Або можна й так -  [аеєиіїйоуюя][бвгґджзклмнпрстфхцчшщ]{1,3}ол$ - тут {1,3} означає що приголосних може бути від 1 до 3 букв.

Це мені нагадало алгоритм відстані Левенштейна для пошуку найбільш подібних слів.