Engels: a versus an

Bij het procedureel genereren van tekst wil ik een functie aoran("apple") die mij vertelt welk lidwoord ik moet gebruiken. Dat lijkt eenvoudig: we kunnen de eerste letter controleren om te zien of het een klinker is. Maar dat zou betekenen dat we an unicorn zouden genereren in plaats van a unicorn.

De eigenlijke regel is niet of het geschreven woord begint met een klinkerletter, maar of het gesproken woord begint met een klinkerklank. Het woord unicorn begint met een klinkerletter (u) maar met een medeklinkerklank (cmudict Y, ipa /j/). Het woord hour begint met een medeklinkerletter (h) maar met een klinkerklank (cmudict AW, ipa /aʊ/).

Visualisatie die laat zien of de eerste twee letters van een woord voldoende zijn om te bepalen of het "a" of "an" moet hebben

Ik was benieuwd hoe vaak deze uitzonderingen voorkwamen en of ze gegroepeerd konden worden. Daarom heb ik een dag besteed aan het analyseren van de data en het maken van enkele visualisaties, waarvan ik de resultaten heb uitgeschreven. Ik was verrast dat slechts 129 van de 32.455 woorden in mijn lijst uitzonderingen nodig hadden.

LLM-notitie: Ik heb geen LLM's gebruikt om deze code te schrijven, maar achteraf gezien had ik dat moeten doen. Dit is eenmalige code om een vraag te beantwoorden. Het hoeft niet schoon of onderhoudbaar te zijn; het moet alleen correct zijn. Ik had meer tijd moeten besteden aan het algoritme voor de vereenvoudiging van de trie en minder tijd aan het parsen van cmudict en het opnieuw leren van d3.js.