2026-07 · Language Learning
Six released threads over one spine: the top 12,000 lemmas ranked over 1.5 billion word tokens, a validated CEFR overlay, a derussification pass, paradigms and audio, a vocabulary-size test, and a text profiler. Every tier hashed, every figure re-derived in CI, one license wall enforced by a test.
31
merges on the surface
12,000
lemmas in the published list
6,391
lemmas with a validated CEFR level
The frequency lists a serious adult learner of Ukrainian needs are thin, often wordform-based, and sometimes quietly calqued from Russian, and the instruments that would measure progress (a vocabulary-size test, a text profiler, a lemmatizer) mostly did not exist as open, cited data.
Every source carries its own license and its own headword convention. The only corpus-validated CEFR profile for Ukrainian could be redistributed with its authors' permission; a multiword resource could be read as validation but never shipped. Nothing pasted into the profiler may leave the browser.
A three-tier release: a committed, cited source snapshot, a pure builder, and frozen hashed files whose coverage curve re-derives live and in CI. Validated levels ship; predicted levels never do. The CC-BY-NC-SA resource is read one way as validation and walled out of the release by a fail-closed test.
Rejected
Predict CEFR levels with a model and ship them as data
A validated level tracks frequency only weakly, so a predicted level would read as a proficiency level it is not. The Python package carries the validated levels and none of the predicted ones.
A wordform list
Ukrainian inflects. The top 1,000 lemmas cover about 61 percent of running tokens, lower than the cross-Slavic figure usually quoted, and a wordform list would have hidden that tax.
The list, the CEFR alignment, the derussification pass, audio and paradigms, the vocabulary-size test, the text profiler, a crosswalk of two lexical minimums, a 142-expression multiword table, a hosted lemmatizer with a round-trip as its deploy gate, an installable Python package, and a Zenodo DOI.
The join to the validated CEFR profile silently failed on lemmas with apostrophes, which Ukrainian has in ordinary words, because they arrived as HTML entities. Every tier had to be rebuilt on the corrected join (#2358), and the paradigm join had the same bug a day later (#2360). Decode at the boundary, then diff the join counts against the source.
Ukrainian Frequency: a lemma-based open frequency list (research field data)
#2054 · 2026-07-14 · feature
Ukrainian Frequency thread 02: CEFR alignment (honestly scoped)
#2200 · 2026-07-22 · feature
ukrainian-frequency: validated CEFR overlay (thread 02) from PULS
#2223 · 2026-07-23 · feature
Ukrainian Frequency: join the author-shared Borodin A1 lexical minimum (the closed seam)
#2258 · 2026-07-27 · feature
Ukrainian frequency: decode the apostrophe entities in the PULS join and rebuild every tier on it
#2358 · 2026-09-13 · feature
Ukrainian Frequency: the text profiler (thread 06)
#2359 · 2026-09-13 · feature
Ukrainian Frequency: crosswalk the two lexical minimums against the validated CEFR profile
#2362 · 2026-09-13 · feature
Ukrainian frequency: ukvocab package, Zenodo tooling, the hosted lemmatizer with its deploy path, and the upstream worklists (WO-1 to WO-5)
#2366 · 2026-09-14 · feature
Ukrainian frequency: the multiword table (B1 extension, stage 3)
#2378 · 2026-09-17 · feature
Ukrainian Frequency: make the prose tier drift-guarded like the data tier
#2411 · 2026-09-19 · feature
Checked at build against the published corpus.
www.jakelawrence.xyz/research/case-study-library/ukrainian-frequency
Cite: Lawrence, J. (2026). An open frequency list for Ukrainian, built as data a learner can check. jakelawrence.xyz case study library.
I design and ship AI tools, full-stack apps, and data pipelines — end to end, to production. Tell me the problem in a sentence; I'll give you an honest read on fit within a day.
Work with me →