
Англійська: a чи an — правило залежить від звуку, а не від першої літери
Короткий допис Red Blob Games розбирає просту на вигляд задачу генерації тексту: як вибрати між a та an. Вирішує не перша літера, а перший звук вимовленого слова — і саме тому тут потрібен словник вимови.
Блог про програмування Red Blob Games опублікував короткий допис про задачу, яка виглядає тривіальною, доки не спробуєш її автоматизувати: як вибрати між a та an у згенерованому тексті.
Правило про звук, а не про написання
Очевидний підхід — перевірити, чи перша літера є голосною, але тоді виходить an unicorn. Справжнє правило стосується вимовленого слова: unicorn починається з голосної літери, але з приголосного звуку — у cmudict це Y, у міжнародному фонетичному алфавіті /j/, — тому пишеться a unicorn. Протилежний випадок — hour: слово починається з приголосної літери, але з голосного звуку (cmudict AW, IPA /aʊ/), тому вживається an hour.
Отже, для коректної реалізації потрібен не рядковий пошук, а словник вимови. Саме з цього почався проєкт.
Один день із 32 455 словами
Автор завантажив cmudict і порівняв правило першого звуку з наївним правилом першої літери. Перша ж спроба дала багато розбіжностей, тож список свідомо скоротили: власні назви (3 133), окремі літери (26), другорядні вимови (9 114, зокрема американська та британська для herb), пунктуація — присвійні форми й скорочення (8 574), абревіатури-ініціалізми (10) та два винятки, вилучені вручну. Ще 81 852 записи відкинули.
Залишилося 32 455 слів, з яких, на подив автора, винятків потребували лише 129. Їх легко впізнати зі списку: слова на eu та ew (eucalyptus, ewe), родина heir, більшість групи honor і honest, hour, once та one, а також довгий хвіст слів на u — unicorn, uniform, unique, union, university, urine, useful, usual, uranium, utensil, uterus, utility, utopia і навіть yttrium.
Сторінку проєкту супроводжують дві візуалізації на d3: одна показує, чи достатньо перших двох літер слова для рішення, друга — скільки літер доводиться переглядати. Відповідь на перше питання однозначна: ні, і графік рясніє червоними вітками, де вимова коливається між голосним і приголосним.
Правила, написані вручну, замість дерева рішень
Автор сподівався звести винятки до мінімального дерева рішень і припускав, що задача пов'язана з мінімізацією DFA, але не досяг цього й написав правила вручну: eu та ew вважаються приголосними, heir, homage, hones і hono — голосними, з окремими випадками для herb та його похідних.
У дописі є й відверта примітка про те, як писався код. Мовна модель не використовувалася, хоча, за словами автора, варто було б: одноразовий код для відповіді на одне питання не мусить бути охайним чи зручним у підтримці — достатньо, щоб він був правильний. Модель могла б розібрати cmudict і зробити графіки на d3.js, залишивши більше часу на кращий алгоритм аналізу trie.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.