A report from my corpus experiment; all figures are computed
and the pages assembled by my run.py script. Broad
(phonemic) transcription. Conventions: /x/ — phoneme, ⟨x⟩ — grapheme,
σ — syllable, C — consonant, V — vowel, OOV — item absent from the
pronouncing dictionary.
riverrun, past Eve and Adam's, from swerve of shore to bend of bay, brings us by a commodius vicus of recirculation back to Howth Castle and Environs.
[…] The fall (bababadalgharaghtakamminarronnkonnbronntonnerronntuonnthunntrovarrhounawnskawntoohoohoordenenthurnuk!) of a once wallstrait oldparr is retaled early in bed and later on life down through all christian minstrelsy.
— James Joyce, Finnegans Wake (1939), opening
Every reading is a new writing — and this page is mine: Finnegans Wake rewritten into phonemes, counts and curves. I first encountered Finnegans Wake in secondary school, through Maciej Słomczyński's Polish translations of selected fragments. After Ulysses and Pynchon, this was the literature that kept pulling me back — yet my English, or more precisely Joyce's English, would not let me immerse myself in that reality. What finally pushed me towards linguistic analysis was Krzysztof Bartnicki's translation: he undertook the break-neck task of rendering the whole of Finnegans Wake into Polish, which took him some thirty years. Using NLP and machine learning, I decided to look for the "substance" of this text. Playing with it, I have discovered plenty of patterns — but I still hope that one day I will experience here what I experienced with Ulysses.
This project is an exercise in machine reading, so it is only fair to disclose the machines — concretely. Every number on this page comes from a deterministic, fully re-runnable pipeline: twelve Python modules (~3,600 lines, standard library only, Python 3.13) working on the raw text (1.3 MB) and open lexical data — the CMU Pronouncing Dictionary (135,166 entries), a 370,105-item English wordlist, OpenSubtitles frequency lists for eleven languages, and hunspell dictionaries for Irish and Latin. Nothing in the results is generated by a neural network.
Two kinds of models stood behind the making. The pipeline was written in tandem with a transformer-based large language model driven through an agentic harness in my terminal: it drafted the ARPABET→IPA mapping, the letter-to-sound rules for Joyce's coinages and the first version of every module, and it argued with me over the operationalisations — whether a rhyme should require a differing onset, where to cut the sonority scale. The collaboration was not blind trust: verification runs caught, among other things, a stress-pattern bug rooted in a Python quirk (the empty string counts as a substring of any string, so consonants were silently voting on word stress), and the fact that macOS's built-in dictionary lacks words as ordinary as ⟨proud⟩, ⟨hang⟩ and ⟨feet⟩ — which had inflated the neologism rate from the true 52.8% to a spectacular-but-wrong 70%.
In a parallel strand of the project I experiment with character-level recurrent networks (LSTMs) trained on the Wake itself: asked to continue Joyce, they hallucinate eerily plausible Wakese — a reminder of how much of the book's texture lives in the raw statistics of its letters. The symmetry is fitting: Joyce compressed dozens of languages into single portmanteau words; language models decompress such words back into probabilities.
I took the full text of Finnegans Wake (1939) — 219,191 words, 57,718 distinct forms — and rewrote it as phonemes, the sounds of speech in IPA notation. On that material I counted which sounds dominate, how places and manners of articulation are distributed, how "singable" the words are (sonority), what lexical stress rhythm the vocabulary carries, and how many rhymes, assonances, alliterations and tip~top-type pairs hide inside the sentences. Three findings stand out: Joyce's invented words are significantly more sonorous than the ordinary English of the same book (Welch's test, p < 0.001); the vocabulary's rhythm is markedly trochaic (DA-da, the pulse of a lullaby); and the prose turns out to be as dense with rhyme as verse — over ten thousand rhyming pairs within sentences.
As the basis of the transcription I took the CMU Pronouncing Dictionary (ARPABET), which represents General American; I mapped its symbols onto the IPA. Text coverage: 80.54% of tokens. Out-of-vocabulary items (OOV — mostly Joyce's coinages and blends, 19.46% of tokens) I transcribed with my own rule-based G2P (grapheme-to-phoneme) module built on the regularities of English spelling (⟨sh⟩→/ʃ/, ⟨ph⟩→/f/, ⟨igh⟩→/aɪ/, ⟨c⟩→/s/ before ⟨e i y⟩, etc.). OOV transcriptions carry no stress information. Total material: 869,056 segments.
Vowels and diphthongs (15): ⟨AA⟩→/ɑ/ ⟨AE⟩→/æ/ ⟨AH⟩→/ʌ/ ⟨AO⟩→/ɔ/ ⟨AW⟩→/aʊ/ ⟨AY⟩→/aɪ/ ⟨EH⟩→/ɛ/ ⟨ER⟩→/ɝ/ ⟨EY⟩→/eɪ/ ⟨IH⟩→/ɪ/ ⟨IY⟩→/i/ ⟨OW⟩→/oʊ/ ⟨OY⟩→/ɔɪ/ ⟨UH⟩→/ʊ/ ⟨UW⟩→/u/; unstressed AH0 is rendered as schwa /ə/.
Consonants (24): ⟨B⟩→/b/ ⟨CH⟩→/tʃ/ ⟨D⟩→/d/ ⟨DH⟩→/ð/ ⟨F⟩→/f/ ⟨G⟩→/ɡ/ ⟨HH⟩→/h/ ⟨JH⟩→/dʒ/ ⟨K⟩→/k/ ⟨L⟩→/l/ ⟨M⟩→/m/ ⟨N⟩→/n/ ⟨NG⟩→/ŋ/ ⟨P⟩→/p/ ⟨R⟩→/ɹ/ ⟨S⟩→/s/ ⟨SH⟩→/ʃ/ ⟨T⟩→/t/ ⟨TH⟩→/θ/ ⟨V⟩→/v/ ⟨W⟩→/w/ ⟨Y⟩→/j/ ⟨Z⟩→/z/ ⟨ZH⟩→/ʒ/.
Vowels make up 38.8% of all segments. Switch the subset to compare the sound profile of dictionary words with Joyce's coinages:
The dominance of /ɪ/, /n/, /t/, /s/, /ɹ/ is close to the distributions reported for conversational American English (Mines, Hanson & Shoup 1978); the share of /ɪ/ is additionally inflated by the CMUdict convention, in which unstressed ⟨IH0⟩ is not reduced to schwa (see §8). The deviations concentrate in the neologisms — switch the toggle above to see /k/, /æ/ and /ʃ/ climb.
Values: share of each phoneme in all segments of the text (%); cell shading is proportional to the combined share of its phonemes.
| bilabial | labiodental | dental | alveolar | postalveolar | palatal | velar | labial-velar | glottal | |
|---|---|---|---|---|---|---|---|---|---|
| plosive | /b/ 2.17 /p/ 2.16 | /t/ 5.96 /d/ 4.39 | /k/ 3.02 /ɡ/ 1.01 | ||||||
| affricate | /dʒ/ 0.53 /tʃ/ 0.51 | ||||||||
| fricative | /f/ 1.97 /v/ 1.81 | /ð/ 2.40 /θ/ 0.55 | /s/ 5.84 /z/ 2.12 | /ʃ/ 0.69 /ʒ/ 0.03 | /h/ 2.07 | ||||
| nasal | /m/ 3.15 | /n/ 6.61 | /ŋ/ 1.10 | ||||||
| lateral | /l/ 4.83 | ||||||||
| approximant | /ɹ/ 5.60 | /j/ 0.60 | /w/ 2.06 |
Vowel nuclei on the IPA quadrilateral; dot area is proportional to frequency. The toggle above (§2) applies here too — the chart redraws for the chosen subset.
| height | backness | share |
|---|---|---|
| near-close | front | 6.78% |
| mid | central | 6.29% |
| open-mid | front | 4.70% |
| near-open | front | 4.21% |
| open-mid | central | 3.22% |
| open | back | 2.96% |
| close | front | 2.71% |
| open | front | 2.28% |
| open-mid | back | 1.64% |
| close | back | 1.54% |
| close-mid | front | 1.17% |
I adopted a sonority scale modelled on the hierarchies of Selkirk (1984) and Clements (1990) (on physical correlates of sonority cf. Parker 2008), normalised to 1–10: open vowels 10, mid 9, close 8; approximants /j w ɹ/ 7; lateral /l/ 6; nasals /m n ŋ/ 5; voiced fricatives 4, voiceless 3; affricates 2.5; voiced plosives 2, voiceless 1. A word's index = the mean sonority of its segments.
The unit of analysis is the lexical type (no frequency weighting). Mean index of dictionary types: 5.531 (SD = 0.876, n = 18,959); of OOV types: 5.736 (SD = 0.798, n = 38,757). The difference of +0.205 is statistically significant (Welch's test, t = 27.21, p < 0.001), though the effect size is moderate. Joyce's lexicon is, on average, more sonorous than its English background.
Pick a word to see its sonority contour — the segmental "melody" of rises towards vowels and dips into consonants:
Stress patterns of polysyllabic words (CMUdict data; DA = stressed syllable). I use foot names for the lexical stress shapes of words, not for verse metre. Distribution of the most frequent patterns:
| pattern | tokens |
|---|---|
| stressed monosyllable (DA) | 112,075 |
| unstressed monosyllable (da) | 28,676 |
| trochee (DA-da) | 22,092 |
| iamb (da-DA) | 4,389 |
| dactyl (DA-da-da) | 2,759 |
| amphibrach (da-DA-da) | 1,975 |
| spondee (DA-DA) | 1,522 |
| 101 | 770 |
The advantage of the trochaic shape over the iambic one (22,092 vs 4,389 tokens) is consistent with the predominance of initial stress in the English vocabulary (Cutler & Carter 1987); deciding whether the text amplifies this tendency beyond the lexicon's norm would require a reference-corpus comparison, which I have not carried out. Mean word length: 1.539 syllables (syllabification = counting vowel nuclei). Distribution of word length in syllables (tokens):
The domain of observation is the orthographic sentence (split at ⟨. ! ?⟩; n = 15,061). I excluded function words from the rhyme and paronomasia rankings. How I defined each figure:
Frequency of the four figure types across the whole text (note: rhyme and paronomasia are counted in pairs, assonance and alliteration in runs — the values are not directly comparable across types):
10,762 rhyming pairs in total. Search the ranked list (type a fragment, e.g. night):
The most frequent rhyme endings: /-ɛd/ (2,181), /-ɛs/ (1,137), /-ɛɹ/ (994), /-ɪŋ/ (764), /-ɛɹs/ (309), /-is/ (250), /-eɪʃən/ (243), /-æn/ (220), /-ʌs/ (177), /-ʌm/ (177), /-æs/ (163), /-ɪn/ (154).
1,386 runs in total. The value n is the length of a single run of consecutive words, not the phoneme's corpus frequency.
| nucleus | n | run |
|---|---|---|
| /ɪ/ | 15 | gnarlybird ygathering runalittle doalittle preealittle pouralittle wipealittle kicksalittle severalittle eatalittle whinealittle kenalittle helfalittle pelfalittle gnarlybird |
| /æ/ | 8 | shortartempa bad cad dad fad sad mad nad |
| /ə/ | 7 | muertification and uxpiration and dumnation and annuhulation |
| /ɪ/ | 7 | into chancerisk wishing him with his famblings |
| /ɪ/ | 6 | since his shebi his shide adi |
| /eɪ/ | 6 | waiting they wait taking they take |
| /ɔ/ | 6 | for all for all all all |
| /æ/ | 6 | laugh that flat that after that |
| /æ/ | 6 | paa lickam laa lickam apl lpa |
| /eɪ/ | 6 | moanday tearsday wailsday thumpsday frightday shatterday |
1,208 runs in total.
| onset | n | run |
|---|---|---|
| /p/ | 21 | pin puff pive piff piff puff pive poo poo puff pive pree pree puff pive pfoor pfoor puff pive pippive poopive |
| /h/ | 9 | hicky hecky hock huges huges huges hughy hughy hughy |
| /t/ | 8 | tilling teel tum telling toll teary turty taubling |
| /b/ | 7 | bald black bronze brown brindled betteraved blanchemanged |
| /b/ | 7 | boosted blasted bleating blatant bloaten blasphorus blesphorous |
| /d/ | 7 | dark deadly dismal doleful desolate dreadful desperate |
| /w/ | 7 | windr wondr wildr weltr wirbl warbl world |
| /t/ | 7 | tay tibby tanny tummy tasty tosty tay |
| /h/ | 6 | hoother had his hurricane hips his |
| /m/ | 6 | milk music married missusses might mercy |
2,196 pairs in total. Typical hits follow the i–a(–o) alternations familiar from English ablaut reduplication:
| pair | n |
|---|---|
| like ~ look | 15 |
| man ~ many | 10 |
| last ~ lost | 7 |
| live ~ love | 6 |
| back ~ buck | 4 |
| tap ~ tip | 4 |
| along ~ long | 4 |
| lead ~ old | 4 |
| sing ~ song | 4 |
| came ~ come | 4 |
| feel ~ full | 4 |
| find ~ found | 4 |
| dear ~ dearo | 4 |
| laughed ~ left | 3 |
The text is divided into 100 equal windows (~2,200 words each). Pick a measure and move your mouse across the chart — the crosshair follows and the exact value is read out below (the slider does the same). Dashed verticals mark the boundaries of Books I–IV.