
ინგლისური: „a“ თუ „an“ — წესი მართლწერაზე კი არა, ბგერაზეა დამოკიდებული
Red Blob Games-ის ბლოგპოსტი ერთი შეხედვით უმარტივეს პრობლემას ეხება: როგორ უნდა აირჩიოს პროგრამამ „a“ თუ „an“. როგორც ირკვევა, გადამწყვეტი პირველი ასო არა, არამედ სიტყვის ბგერაა.
პროგრამირების ბლოგ Red Blob Games-მა მოკლე პოსტი გამოაქვეყნა იმაზე, თუ რა რთული შეიძლება იყოს ერთი შეხედვით უმარტივესი ამოცანა ტექსტის ავტომატურ გენერაციაში — სიტყვის წინ „a“ თუ „an“ უნდა დავწეროთ.
წესი ბგერას ეხება, არა მართლწერას
თავიდან ყველაფერი მარტივი ჩანს: საკმარისია შევამოწმოთ, იწყება თუ არა სიტყვა ხმოვანი ასოთი. თუმცა ასეთი შემოწმების შედეგად an unicorn გამოვიდოდა, a 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-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.