Клавіатурні слова
Колись мене зацікавило питання які слова можна написати на клавіатурі так, щоб кожна наступна кнопка була сусідньою до попередньої. Такі слова буду називати «Клавіатурні слова». Я спробував знайти декілька слів, знайшов слова Павук, Цівка і Мавка :) Сьогодні в мого друга Zwirr'а виникло подібне питання (правда він шукав слова по-оригінальніші, типу «йцука»). І знову мене заінтриґувало дане питання, і настільки, що я вирішив зробити прогу, яка знаходить всі клавіатурні слова по заданому словнику. Прогу нашвидкуруч набив на C#:
using System; using System.Collections.Generic; using System.IO; using System.Text; namespace WordsOnKeybFinder { class Program { static void Main() { StreamReader sr = new StreamReader("dictionary.txt", Encoding.UTF8); string[] allWords = sr.ReadToEnd().Split(' '); sr.Close(); StreamWriter sw = new StreamWriter("output.txt", false, Encoding.UTF8); Dictionary<Char, string> ukrKeysDep = new Dictionary<char, string>(); ukrKeysDep['й'] = "цф"; ukrKeysDep['ц'] = "йФіву"; ukrKeysDep['у'] = "цівак"; ukrKeysDep['к'] = "увапе"; ukrKeysDep['е'] = "капро"; ukrKeysDep['н'] = "епрог"; ukrKeysDep['г'] = "нролш"; ukrKeysDep['ш'] = "голдщ"; ukrKeysDep['щ'] = "шлджз"; ukrKeysDep['з'] = "щджєх"; ukrKeysDep['х'] = "зжєї"; ukrKeysDep['ї'] = "хє"; ukrKeysDep['ф'] = "йція"; ukrKeysDep['і'] = "фцувчя"; ukrKeysDep['в'] = "іукасч"; ukrKeysDep['а'] = "вкепмс"; ukrKeysDep['п'] = "аенрим"; ukrKeysDep['р'] = "пнготи"; ukrKeysDep['о'] = "ргшльт"; ukrKeysDep['л'] = "ошщдбь"; ukrKeysDep['д'] = "лщзжюб"; ukrKeysDep['ж'] = "дзхєю"; ukrKeysDep['є'] = "жхї"; ukrKeysDep['я'] = "фіч"; ukrKeysDep['ч'] = "яівс"; ukrKeysDep['с'] = "чвам"; ukrKeysDep['м'] = "сапи"; ukrKeysDep['и'] = "мпрт"; ukrKeysDep['т'] = "ироь"; ukrKeysDep['ь'] = "толб"; ukrKeysDep['б'] = "ьлдю"; ukrKeysDep['ю'] = "бдж"; ukrKeysDep['ґ'] = ""; ukrKeysDep['\\''] = "жхї"; ukrKeysDep['-'] = "зх"; for (int i = 0; i < allWords.Length; ++i) allWords[i] = allWords[i].ToLower(); foreach (string s in allWords) { bool ok = true; for (int i = 0; i < s.Length - 1; ++i) if (!ukrKeysDep[s[i]].Contains(s[i + 1].ToString())) { ok = false; break; } if (ok) sw.WriteLine(s); } sw.Close(); } } }
Слова взяв із сайту Сеник Миколи. Дяка ;)
В результаті я отримав такий список слів:
Як виявилось, найдовшим клавіатурним словом є слово із 7 букв - Прототип, за ним ідуть слова на 6 букв - аеролог, гримаса, логотип, паперть, і на 5 букв - гоголь, квакер :D, кернер, макака, примас, припас, пролог, сапрол, трипер
Ось такі цікаві результати вийшли. Можливо знайдено і не всі клавіатурні слова, щоб знайти більше, треба розширити словник.
P.S. Є ще одна прога із словником, яку я хочу вже давно зробити, але руки не доходять - це програма підбору слів для рими. Мета - допомогти віршотворцям підбирати слова які римуються до слів із певним закінченням. Очевидно, щоб зробити цю програму доведеться скористатись кращим словником, ніж в програмі по знаходженню клавіатурних слів, оскільки треба враховувати різні відміни іменників. Такий словник можна взяти з програми «Словники України» (до речі за інфою з Лінгвістичного порталу зараз готується до виходу версія 3.1!), інших просто не знаю... Це всього-лиш ідея, але якщо хтось зацікавиться і зробить таку програму раніше за мене, то пишіть :)
Нажаль такої української програми немає, але іншомовні мабуть є. До речі, може знайдеш якісь англійські аналоги, так чисто для прикладу?
А програма така дійно потрібна.
Як я казав, слова треба брати із словників України. Є тільки 1 але - те що ці словники закодовані в бінарні файли, а як виколупати звідти слова невідомо. Наразі я зробив макрос, який копіює слова прямо з екрану. Але на те щоб скопіювати усі слова зі словника (а їх там ~252 тис.) і обробити мені потрібно десь тиждень часу. Потім можна буде приступити і до складання програми. Словом, це все не так просто як здається, але взагалі реально.
Що добре в словниках України, це те що там в кожному слові вказується наголос, що може дуже знадобитись.
А взагалі можна обійтись без програми і підбирати риму за допомогою регулярних виразів. Тільки знову ж таки треба мати хороший словник. Як це робиться?
Для початку треба знати що таке регулярні вирази.
Потім треба мати порядний текстовий редактор із регулярним пошуком. Сам користуюсь EmEditor`ом, також є непоганий редактор - Notepad++.
Ну і словник, можна взяти для прикладу із сайту Сеника Миколи.
Приклади шаблонів для пошуку виписувати не буду, скажу лиш що це досить дубовий спосіб і не із приємних, але дієвий.
Буду у вільний час писати цю програму, так що всім кому це цікаво - слідкуйте за оновленнями, підписуйтесь на RSS 8-).
Кепка...
Пролог...
Голоти...
Тритон...
а це цікаво! =)
Єдине чого я не знаю - це звідки вицепити український словник. Можливі варіанти які я знаю:
Покищо напривабливішим є останній варіант. Але може ви знаєте ще якісь варіанти?
2010.09.20
привіт! знайшла вас точно так як і всі - підбір рим) остання ссилка не працює. от російська версія, правда не досконала, але якщо критично треба якесь слово, то можна скористатись: http://www.stihi.ru/cgi-bin/assist.pl
мені,наприклад не дуже підходить такий словник,оскільки російська мова - зовсім інша мова,це теж саме,шо французам користуватися римівниками німців
Назбиралось багато чого я хочу сказати і я відповім дописом :)
http://lukom.org/blog/uk-rhyme-selection-problem