A lemma-based, coverage-graded frequency list for modern Ukrainian, built as open data. It answers a practical question with a real number: how much of what you read does a given amount of vocabulary actually unlock?
Find out where you stand, then study the words that buy the most text.
Level a reading, and see what the published minimums agree on.
Hashed open-data files, an HTTP lemmatizer and a Python package.
Every figure re-derives in your browser. Start from the method.
Tools: Vocabulary test · Text profiler · Crosswalk · Word lookup · Lemmatizer API
The report that started this series was blunt about the gap: for Ukrainian, the frequency lists a serious learner needs are thin, often wordform-based, and sometimes quietly calqued from Russian. A wordform list scatters a single word's frequency across a dozen or more inflected forms, so it understates how much a given amount of vocabulary buys you.
This list counts lemmas instead, the dictionary form a learner actually studies, with its part of speech. It is derived from a large, modern, native-authored corpus, so it reflects the Ukrainian people actually write today, not a mid-century textbook.
For comparison, in English the ~2800 words of the General Service List average about 82% coverage. Ukrainian needs far more lemmas to reach the same place. That is the inflection tax, measured.
The most frequent lemmas, with part of speech and per-mille frequency. The full 12,000 are in the download.
| # | Lemma | POS | per mille |
|---|---|---|---|
| 1 | в | ADP | 20.7489 |
| 2 | на | ADP | 20.6735 |
| 3 | у | ADP | 18.6486 |
| 4 | і | CCONJ | 16.5815 |
| 5 | з | ADP | 15.259 |
| 6 | бути | VERB | 10.6332 |
| 7 | не | PART | 10.4292 |
| 8 | що | SCONJ | 10.3296 |
| 9 | до | ADP | 9.1939 |
| 10 | за | ADP | 8.5376 |
| 11 | та | CCONJ | 8.4347 |
| 12 | який | DET | 7.9025 |
| 13 | рік | NOUN | 6.6948 |
| 14 | про | ADP | 6.2134 |
| 15 | він | PRON | 6.1849 |
| 16 | Україна | PROPN | 5.8085 |
| 17 | це | PRON | 5.7827 |
| 18 | а | CCONJ | 4.994 |
| 19 | цей | DET | 4.3466 |
| 20 | як | SCONJ | 4.203 |
| 21 | для | ADP | 4.1004 |
| 22 | від | ADP | 3.9154 |
| 23 | я | PRON | 3.642 |
| 24 | вони | PRON | 3.403 |
Part-of-speech make-up of the released list. Proper nouns are included and labeled, so you can filter them out.
Thread two set out to label every high-frequency lemma with a CEFR level, and now it can. There is exactly one corpus-based, expert-validated CEFR vocabulary profile for Ukrainian (Synchak and colleagues, 2025, on the PULS platform), and a co-author granted permission to redistribute its per-lemma A1 to C1 levels. Joined onto this frequency list, POS-aware, that validated map now labels 6,403 of the top 12,000 lemmas. It is the headline of this thread, below.
Two honest companions stand beside it. The paper's published distribution is still cited (a frozen view the live map already exceeds), cross-referenced against this list's coverage curve to show why a frequency rank is not a proficiency level. And the open, unvalidated course overlay stays on as a direct cross-check: now that a validated map exists, the free signal can be measured against it. The validated map is a dated snapshot, not a final one, because the profile is still being extended.
Lemmas placed by the expert-validated process (Synchak et al. 2025) against the project's per-level target. Complete through B1, preliminary above it.
The validated A1 to A2 core (2,363 lemmas) versus a same-size core taken straight off this frequency list, by running-text coverage. The two are measured on different corpora, so read the spread as indicative: pedagogical selection deliberately trades raw coverage for teachability.
Why they diverge: the validated profile front-loads communicatively useful words that are not the most frequent (борщ borscht, зошит workbook) and pushes high-frequency abstract nouns (наука science, освіта education) up to B1 for conceptual load. A frequency list optimizes coverage; a CEFR level encodes teachability. That is why you cannot mechanically relabel one as the other, and why a real CEFR overlay here waits on open data above B1.
This is the headline of thread two: the one corpus-based, expert-validated CEFR profile for Ukrainian (Synchak et al. 2025, the PULS platform), joined onto this frequency list per lemma. A co-author granted permission to redistribute the per-lemma A1 to C1 levels; the join is POS-aware, so a homograph is dropped rather than mislabeled. Each lemma's level is its onset level, the earliest at which the profile introduces it.
It is a dated snapshot, not the final map. The profile is still being extended (the live list already carries more B2 and C1 lemmas than the published paper), so treat these levels as validated but provisional.
6,403 of the top 12,000 lemmas now carry a validated CEFR level, A1 to C1
The join is POS-aware, so a spelling the profile knows only at an unrelated part of speech is dropped rather than mislabeled: 42 rows. But the corpus tagger and the profile draw some lines in different places, and until 2026-09-13 that alone dropped 107 rows that are the same word under two conventions, 34 of them in the top thousand: determiners the profile calls pronouns (який, цей, той), ordinals it calls numerals (перший, другий), its indeclinable-word class (можна, треба), preposition-adverb and particle-adverb words, and substantivized adjectives (військовий, дорослий). Ten explicit rules now recover them, and every row of the download says how it joined, so the strict join is one filter away. One consequence is a number rather than a footnote: 130 spellings appear at two ranks, because the tagger split one word into two readings, and each row keeps its own rank and part of speech.
Only weakly, which is the finding. The rank correlation between validated level and corpus frequency is 0.38: the median frequency rank rises cleanly from A1 to C1, so the ordering is sane, but the fit is loose. A CEFR level and a frequency rank are simply not the same axis, which is why you cannot relabel one as the other.
The next thread builds on the 1,604 lemmas the profile already labels B1, so the first question is where they sit on this list. Everywhere: a tenth of validated B1 ranks before 740, half before 3,767, and a tenth after 9,370. Every level spans every thousand-rank band. The grid below shows each level's share per band, on that level's own scale.
Read the two columns as a register, not as an error. The source corpus is news-heavy, so civic and journalistic B1 words rank early and everyday, personal B1 words rank late. A rank band would have cut the second column and kept a good deal of B2 from the first, which is why the extension keeps UberText as the single frequency base and treats register as a separate feature.
Measured on the 1,976 lemmas that both the validated map and the open course overlay cover, comparing the course's raw first-occurrence guess against the validated level. A far stronger test than the small hand-curated gold sample: it is the whole overlap.
| # | Lemma | CEFR |
|---|---|---|
| 1 | в | A1 |
| 2 | на | A1 |
| 3 | у | A1 |
| 4 | і | A1 |
| 5 | з | A1 |
| 6 | бути | A1 |
| 8 | що | A2 |
| 11 | та | A2 |
| 20 | як | A2 |
| 25 | свій | B1 |
| 38 | під | A2 |
| 41 | весь | A2 |
| 45 | по | A2 |
| 61 | заявити | C1 |
| 69 | повідомити | B1 |
| 72 | рада | B2 |
| 73 | і | B1 |
| 75 | ж | B1 |
| 78 | й | B1 |
| 80 | при | B1 |
| 121 | зазначити | B2 |
| 155 | представник | B2 |
| 213 | верховний | B2 |
| 225 | управління | B2 |
| 252 | примітка | B2 |
| 292 | глава | C1 |
| 414 | чин | C1 |
| 432 | розслідування | C1 |
| 627 | виборчий | C1 |
| 756 | законодавство | C1 |
The validated map above needs the authors' permission to redistribute. This overlay is the fully open alternative: it labels our lemmas from the learn-ukrainian open course (Krisztian Koos, CC-BY-SA), an expert selection based on Ukraine's 2024 State Standard, no permission needed. A lemma's level here is the first course lesson that introduces it, so treat it as a rough teaching-order signal, not a proficiency label.
Its role now is a cross-check, not a fallback. The validated overlay above measures the two against each other on the full overlap; this card keeps the open overlay's own calibration against the published gold points. Neither the open map alone nor the paper's frozen tables is the finished thing a learner deserves, and closing that gap is why this series exists.
2,325 of the top 12,000 lemmas carry an open CEFR label, A1 to B2
Synchak et al. publish concrete CEFR levels for specific lemmas. Where those overlap this overlay, the disagreement is measured directly, so the overlay is calibrated, not just asserted. The sample is small (a few dozen gold points), so read the interval, not the point estimate.
| Lemma | Validated | Overlay | |
|---|---|---|---|
| бути | A1 | A1 | ✓ |
| рік | A1 | A1 | ✓ |
| він | A1 | A1 | ✓ |
| для | A1 | B1 | ≠ |
| я | A1 | A1 | ✓ |
| вони | A1 | A1 | ✓ |
| також | A1 | A1 | ✓ |
| вона | A1 | A1 | ✓ |
| час | A1 | A1 | ✓ |
| мати | A1 | A1 | ✓ |
| могти | A1 | A1 | ✓ |
| людина | A1 | A1 | ✓ |
| після | A2 | A1 | ≠ |
| новий | A1 | A1 | ✓ |
| перший | A1 | A2 | ≠ |
| країна | A1 | A1 | ✓ |
| сказати | A1 | A1 | ✓ |
| стати | A1 | A2 | ≠ |
| особа | A2 | A1 | ≠ |
| через | A1 | B1 | ≠ |
| область | A1 | B1 | ≠ |
| заявити | C1 | B1 | ≠ |
| або | A1 | A1 | ✓ |
| щоб | A2 | A1 | ≠ |
| голова | A1 | A1 | ✓ |
| два | A1 | A1 | ✓ |
| місто | A1 | A1 | ✓ |
| повідомити | B1 | A2 | ≠ |
| слово | A1 | A1 | ✓ |
| день | A1 | A1 | ✓ |
| місце | A1 | A1 | ✓ |
| робота | A1 | A1 | ✓ |
| повідомляти | B1 | B1 | ✓ |
| себе | A2 | A2 | ✓ |
| якщо | A1 | A1 | ✓ |
| питання | A1 | A1 | ✓ |
| великий | A1 | A1 | ✓ |
| щодо | B1 | B1 | ✓ |
| рішення | B1 | B1 | ✓ |
| компанія | A1 | A2 | ≠ |
| район | A1 | A1 | ✓ |
| раніше | A2 | A1 | ≠ |
| отримати | A1 | A2 | ≠ |
| частина | A1 | A1 | ✓ |
| партія | B1 | B2 | ≠ |
| хто | A1 | A1 | ✓ |
| працювати | A1 | A1 | ✓ |
| результат | A1 | A2 | ≠ |
| можна | A1 | A1 | ✓ |
| дитина | A1 | A1 | ✓ |
| головний | A1 | A2 | ≠ |
| село | A1 | A1 | ✓ |
| склад | B1 | A1 | ≠ |
| держава | A2 | B2 | ≠ |
| чоловік | A1 | A1 | ✓ |
| хотіти | A1 | A1 | ✓ |
| життя | A1 | A2 | ≠ |
| право | B1 | B2 | ≠ |
| сьогодні | A1 | A1 | ✓ |
| уряд | B1 | B2 | ≠ |
| між | A2 | A2 | ✓ |
| вибори | B1 | B1 | ✓ |
| тисяча | A1 | A1 | ✓ |
| знати | A1 | A1 | ✓ |
| дія | B1 | A1 | ≠ |
| ситуація | A1 | B2 | ≠ |
| тут | A1 | A1 | ✓ |
| зараз | A1 | A1 | ✓ |
| центр | A1 | A1 | ✓ |
| становити | B1 | B2 | ≠ |
| допомога | A1 | A1 | ✓ |
| три | A1 | A1 | ✓ |
| березень | A1 | A1 | ✓ |
| зробити | A1 | B1 | ≠ |
| місцевий | A2 | A2 | ✓ |
| кількість | B1 | A2 | ≠ |
| початок | A1 | A1 | ✓ |
| другий | A1 | B1 | ≠ |
| почати | A1 | B1 | ≠ |
| гривня | A1 | A1 | ✓ |
| стан | B1 | B1 | ✓ |
| там | A1 | A1 | ✓ |
| писати | A1 | A1 | ✓ |
| жити | A1 | A1 | ✓ |
| мета | B1 | A2 | ≠ |
| освіта | B1 | A2 | ≠ |
| написати | A1 | A2 | ≠ |
| чорний | A1 | A1 | ✓ |
| наука | B1 | A2 | ≠ |
| білий | A1 | A1 | ✓ |
| підписати | A2 | B1 | ≠ |
| займатися | A2 | A2 | ✓ |
| червоний | A1 | A1 | ✓ |
| стіл | A1 | A1 | ✓ |
| зелений | A1 | A1 | ✓ |
| традиція | A1 | A2 | ≠ |
| підпис | A1 | B1 | ≠ |
| ліжко | A1 | A1 | ✓ |
| синій | A1 | A1 | ✓ |
| крісло | A1 | A1 | ✓ |
| годинник | A1 | B1 | ≠ |
| помаранчевий | A2 | A1 | ≠ |
| цікавитися | A2 | A2 | ✓ |
| типовий | A2 | A1 | ≠ |
| стілець | A1 | A1 | ✓ |
| меблі | A1 | A2 | ≠ |
| захоплюватися | A2 | A2 | ✓ |
| посуд | A1 | B1 | ≠ |
| допис | B1 | B1 | ✓ |
| лампа | A1 | A1 | ✓ |
| шафа | A1 | B1 | ≠ |
| холодильник | A1 | A2 | ≠ |
| рушник | A1 | A1 | ✓ |
| диван | A1 | A1 | ✓ |
Only 114 of 200 gold points fall inside the top 12,000 and share the overlay's part of speech; the rest are rarer words, or homographs of a different sense. The misses run both ways: more often the course places a concrete but corpus-rare noun (шафа wardrobe, посуд dishes) higher than the validated profile, which front-loads it to A1 for a beginner; less often it puts an abstract noun (наука science, освіта education) a level lower. Much of that gap is not error but two philosophies: the course follows where a word is taught, the profile makes deliberate beginner-priority overrides.
The join is POS-aware, so 75 homographs (a fish and a quantifier that share a spelling, for instance) were dropped rather than mislabeled. And where the validated profile publishes a level, that level is used and marked validated, so 114 labels here are Synchak's own, not the heuristic's. The agreement above is measured on the heuristic BEFORE those overrides, so the number is not flattered by them.
Weakly, which is the honest answer. The rank correlation between assigned level and corpus frequency is 0.283 (a CEFR level is not frequency, so a loose fit is expected), but the median frequency rank does rise from A1 to B2, so the ordering is at least directionally sane.
| # | Lemma | CEFR |
|---|---|---|
| 1 | в | A1 |
| 2 | на | A1 |
| 3 | у | A1 |
| 4 | і | A1 |
| 5 | з | A1 |
| 6 | бути | A1 |
| 9 | до | B1 |
| 10 | за | A2 |
| 22 | від | B1 |
| 38 | під | A2 |
| 45 | по | B1 |
| 47 | після | A2 |
| 57 | особа | A2 |
| 61 | заявити | C1 |
| 63 | щоб | A2 |
| 69 | повідомити | B1 |
| 83 | повідомляти | B1 |
| 85 | себе | A2 |
| 90 | щодо | B1 |
| 123 | дані | B2 |
| 284 | матч | B2 |
| 331 | парламент | B2 |
| 338 | акція | B2 |
| 403 | порушення | B2 |
| 408 | належати | B2 |
The field census below used to list the "1000 i 1 slovo" A1 lexical minimum (Kseniia Borodin and Oksana Turkevych, School of Ukrainian Language and Culture, Ukrainian Catholic University) as walled: licensed CC-BY-4.0 but published only as a prose PDF an extractor could not reach, so the one independent, empirically grounded A1 guideline for Ukrainian could not be joined and the overlay's rigor model called that missing consensus a seam. This page asked the authors for a machine-readable table, and co-author Kseniia Borodin sent the word list herself. This card is that list, joined onto the frequency list and republished as attributed open data under the guide's own license.
The join is honest about its grain. The authors' unit is the published entry (a single word, an aspect pair, a masculine and feminine pair, sometimes a whole phrase), the list carries no part of speech, and the join is by lemma string at the best rank, coarser than the POS-aware overlays above. Phrase entries are counted, never force-joined, and a beginner word the corpus does not rank stays honestly off-list.
838 of the 929 unique A1 entries join the top 12,000, reaching 833 distinct lemmas
Of the 806 joined lemmas the validated PULS map also covers, 75.7 percent are validated A1 and 96.8 percent sit at A1 or A2. Two independent efforts, a corpus-validated profile and an expert lexical minimum, converge on what beginner Ukrainian is. The handful above A2 is mostly the price of a coarser join: автомат the A1 ticket machine shares a spelling with the C1 rifle, and this list cannot tell them apart without a part of speech.
The 833 matched lemmas cover about 34.7 percent of running text; the 833 highest-frequency lemmas would cover about 57.6 percent. That is the same finding as the validated core above, now measured on a source this page did not build: a pedagogical A1 selection deliberately trades raw coverage for concrete, teachable words, and 72 of its word entries (апельсин orange, виделка fork, бутерброд sandwich) do not rank in this news-heavy top 12,000 at all.
| # | Published entry | Lemma | PULS |
|---|---|---|---|
| 1 | в, у | в | A1 |
| 2 | на | на | A1 |
| 4 | і, й, та | і | A1 |
| 5 | з, із, зі | з | A1 |
| 6 | бути | бути | A1 |
| 7 | не | не | A1 |
| 1538 | готель | готель | A1 |
| 1545 | стать | стать | A2 |
| 1546 | дочка | дочка | A1 |
| 1549 | готувати | готувати | A1 |
| 1566 | папір | папір | A1 |
| 1570 | купувати – купити | купити | A1 |
| 11598 | цукерка | цукерка | A1 |
| 11703 | курка | курка | A1 |
| 11781 | крем | крем | A2 |
| 11811 | фотографувати | фотографувати | A1 |
The A1 card above closed a seam. Its provenance note also recorded an open one, in plain words: the A2 volume of the same series existed, but no machine-readable A2 list had been shared. That volume has since been published open access under CC-BY-4.0 by Kseniia Borodin and Olesia Lazarenko at the Europa-Universitat Viadrina, so the seam closes by publication rather than by favor. This card is its 1,000-entry register, extracted from the publication's own PDF, joined onto the frequency list the same coarse way, and republished as attributed open data.
Two things become answerable that were not before. Because this is the same authors' next volume, the two lists together measure what one CEFR step actually costs, in frequency ranks rather than in word counts. And because the A2 book also prints its whole vocabulary regrouped under its own 51 topic headings, this is the first source on this page that can say WHICH semantic fields a news-heavy frequency list misses, not merely how many words it misses.
710 of the 1,000 published A2 entries join the top 12,000, reaching 709 distinct lemmas
Only 45 of the A2 entries are words the same authors' A1 minimum already claimed, and those are almost all verbs collecting their perfective partner. The other 955 (95.5 percent) are new at A2, and they sit measurably deeper in the corpus: median rank 2,923 against 1,643 for the words carried up from A1. A CEFR step is not a bigger pile of the same words. It is a move outward into rarer ones.
The book groups its 1,124 thematic units under 51 topic headings. Joined against the frequency list, 21.4 percent of them do not rank in the top 12,000 at all, and the misses are not evenly spread. The worst-covered fields are the concrete, domestic, physical ones: food, personal hygiene, household technology, and the numerals, where both the collective forms and the ordinals the authors deliberately extended to thirtieth (so a learner could say a date) fall outside the list. A corpus of published Ukrainian news is a poor description of a kitchen.
Of the 673 joined lemmas the validated PULS map also covers, 70.1 percent sit at A1 or A2 and 29.9 percent sit above A2, nearly all at B1. That is a looser agreement than the A1 card found, and it should be: A2 is where two expert efforts start to disagree about the boundary, and the coarse lemma-string join adds noise of its own. The page reports the disagreement rather than tuning it away.
The 709 matched lemmas cover about 11.9 percent of running text; the 709 highest-frequency lemmas would cover about 55.2 percent. The trade the A1 card measured widens sharply at A2, and 227 of the word entries do not rank in this news-heavy top 12,000 at all, against 72 at A1. This is the honest ceiling on frequency-first learning: past the beginner core, a frequency list and a syllabus stop describing the same language.
| # | Published entry | Lemma | PULS |
|---|---|---|---|
| 9 | до | до | A1 |
| 21 | для | для | A1 |
| 22 | від | від | A1 |
| 25 | свій | свій | B1 |
| 27 | Бува́й(те)! | те | A1 |
| 35 | той | той | A1 |
| 2813 | Бе́льгія | Бельгія | · |
| 2822 | звук (Р.в. одн. зву́ка) | звук | A2 |
| 2836 | відві́дувач / відві́дувачка | відвідувач | B1 |
| 2840 | зустріча́ти(ся) – зустрі́ти(ся) | зустріти | A1 |
| 2843 | підзе́мний | підземний | B1 |
| 2854 | деревʼя́ний | дерев’яний | A2 |
| 11864 | симпати́чний | симпатичний | B1 |
| 11907 | па́ска | паска | A2 |
| 11977 | знайо́мити(ся) – познайо́мити(ся) | знайомити | B1 |
| 11982 | тризу́б | тризуб | B1 |
The three cards above each read one source against the frequency list. This one reads two sources against each other. Ukrainian now has both a corpus-informed teaching syllabus, the A1 and A2 volumes of "1000 i 1 slovo", and a corpus-validated descriptive profile, the Ukrainian Vocabulary Profile on PULS. They were built by different methods to answer different questions, and until now nobody had joined them lemma by lemma. This card does, on the frequency spine, and classifies every cell.
The point is not to score either one. A syllabus decides what to teach on Tuesday and a profile records where a word first turns up in graded use; they are allowed to differ, and the interesting reading is where and how. The grid below is the whole join. Choose a cell and the words in it are listed underneath, most frequent first.
10,366 lemmas in the union of the two sources, 1,200 of them placed at the same level by both
Rows are the minimum volume that carries the word, columns the level the validated profile gives it. Select a cell to list its words.
| Minimum | A1 | A2 | B1 | B2 | C1 | none | Σ |
|---|---|---|---|---|---|---|---|
| A1 | 992 | ||||||
| A2 | 1,137 | ||||||
| neither | 8,237 | ||||||
| Σ | 968 | 1,379 | 2,385 | 3,522 | 1,940 | 172 | 10,366 |
The 24 most frequent, from the published release. The full table is the download.
| # | Lemma | POS | Volume | PULS |
|---|---|---|---|---|
| 9 | до | ADP | A2 | A1 |
| 21 | для | ADP | A2 | A1 |
| 22 | від | ADP | A2 | A1 |
| 35 | той | DET | A2 | A1 |
| 56 | стати | VERB | A2 | A1 |
| 59 | область | NOUN | A2 | A1 |
| 87 | якщо | SCONJ | A2 | A1 |
| 95 | компанія | NOUN | A2 | A1 |
| 102 | національний | ADJ | A2 | A1 |
| 104 | отримати | VERB | A2 | A1 |
| 110 | частина | NOUN | A2 | A1 |
| 118 | світ | NOUN | A2 | A1 |
| 119 | раз | NOUN | A2 | A1 |
| 130 | без | ADP | A2 | A1 |
| 135 | територія | NOUN | A2 | A1 |
| 141 | життя | NOUN | A2 | A1 |
| 168 | допомога | NOUN | A2 | A1 |
| 181 | початок | NOUN | A2 | A1 |
| 184 | почати | VERB | A2 | A1 |
| 196 | команда | NOUN | A2 | A1 |
| 297 | біля | ADP | A2 | A1 |
| 335 | число | NOUN | A2 | A1 |
| 352 | кінець | NOUN | A2 | A1 |
| 370 | вік | NOUN | A2 | A1 |
Of the 174 words the profile validates at A1 and the syllabus holds back to A2, four are prepositions and a conjunction that the corpus ranks in its first 130: до (9), для (21), від (22) and без (130), plus якщо (87). The A1 volume does carry по, про and через, so this is a line the authors drew on purpose and have since confirmed: a preposition is held back until the case it governs is taught. It is exactly the kind of decision a crosswalk makes visible and a word count cannot.
Three limits, and no reading here survives ignoring them. The minimums carry no part of speech, so homographs collapse into one row. A profile level is the onset of a lexeme's earliest sense, so a word can be validated A1 for a sense the syllabus does not teach. And the three sources do not agree on what one lemma is: те heads the absent list at rank 27 not because anyone forgot it but because the spine and the profile call it a lemma while the syllabus calls it the neuter of той, which the A2 volume carries. Read the absent column as candidates to check.
The card above says 229 word entries of the A2 minimum do not rank in this list's top 12,000, and reads that as the ceiling on learning by frequency. That reading rests on something untested. This list is built on UberText 2.0's COMBINED corpus, and the largest thing in that corpus by a wide margin is news. So an off-list word might be rare in Ukrainian, or it might be ordinary and simply absent from journalism, which does not often discuss forks, pumpkins or neckties. Those two readings give opposite advice to anyone building a word list, and nothing above can tell them apart.
So we built two frequency lists instead of one, from UberText's own fiction and news subcorpora: same collection, same cleaning, same lemmatizer, same sampling shape, both capped to the same token count. Genre is the only thing that differs. The ranks below are internally comparable and deliberately NOT comparable to the main list on this page, which a different lemmatizer produced.
News reaches 658 of the entries (70.3 percent). Fiction reaches 648 (69.2 percent). Almost the same amount, and not the same words: together they reach 744 (79.5 percent). A second genre of the same size buys 9.2 points that more of the first genre would not have bought. For a pedagogical target, corpus diversity is worth more than corpus size.
The exchange is close to symmetric, which is what makes it a real result rather than a bigger hammer: fiction reaches 30.9 percent of what news misses, and news reaches 33.3 percent of what fiction misses. Neither genre is better. They are looking at different parts of the language.
Read the two rows together and the mechanism is plain. Journalism supplies the institutional and the geographic; fiction supplies the domestic, the bodily and the sensory. Neither is a description of the language on its own.
These ranks come from our own lemmatizer pass over two subcorpora, not from the lemmatizer behind the main list on this page. They are comparable to each other and to nothing else here, and no figure above mixes them with the main list. The lemmatizer also mis-handles a few high-frequency pronouns, identically in both genres, so it cannot manufacture a difference between them.
Thread two now joins a validated profile (by the authors' permission), an author-shared A1 lexical minimum, and an open course overlay. That it took two direct asks to get here is the point: the open, per-lemma, CEFR-graded word list, a standard resource for learning a language, has been built for about a dozen languages and never published as open Ukrainian data. Here is the whole field.
| Source | Access | Levels |
|---|---|---|
| Ukrainian Vocabulary Profile (PULS)validated | by permission | A1-C1 (to B1) |
| State Standard 2024 (SLSUFL) | documents only | A1-C2 |
| CEFR & Ukrainian-English Language Portfolios (PCUH) | documents only | A1-B1 |
| learn-ukrainian course | open, CC-BY-SA | A1-B2 |
| 1000+1 Words (Borodin, Turkevych) | shared by the authors | A1 |
| 1000+1 Words A2 (Borodin, Lazarenko) | open, CC-BY | A2 |
This page folds in an open Ukrainian CEFR word list the moment one exists, and that is not hypothetical: the A1 minimum above arrived exactly this way, because its authors answered an email. The schema it needs is small: lemma, part of speech, and CEFR level, as CSV or JSON.
The validated map labels 1,604 lemmas on this list B1. This thread builds the enrichment layer a learner working toward B2 actually needs on top of those labels: which verb pairs with which, what case each verb governs, what each word keeps company with, and a real sentence for each. Every figure is a count over open data, and every table ships as a download.
The other 5,597 lemmas have no validated level. A model guesses one for the content words among them, and the guess ships in a separate file with its own error rates, never merged into the validated column. Where the model is unsure it says so on the row.
Ukrainian aspect is lexical: a perfective and its imperfective are two lemmas, so the table relates them instead of tagging one. For the 443 B1 verbs, Wiktionary lists a partner for 378, a hand-curated table of suppletive pairs (брати and взяти among them) is asserted on top, 0 of its pairs touching a B1 verb, and the corpus supplies every attested prefixed derivative. Each related verb keeps its own validated level, which makes 102 split-level pairs visible: a B1 verb whose partner the profile places elsewhere.
102 of the 346 leveled partners sit at a level other than B1. A learner who meets the B1 member has usually not met the other one.
| B1 verb | Partner | Aspect | Partner level | UberText |
|---|---|---|---|---|
| захотіти B1 | хотіти | impf | A1 | 1,047,986 |
| зіграти B1 | грати | impf | A1 | 293,227 |
| посидіти B1 | сидіти | impf | A1 | 214,612 |
| відсвяткувати B1 | святкувати | impf | A1 | 38,780 |
| розповідати B1 | розповісти | pf | A2 | 592,456 |
| використати B1 | використовувати | impf | A2 | 400,531 |
| помирати B1 | померти | pf | A2 | 364,816 |
| виступити B1 | виступати | impf | A2 | 342,427 |
| підписувати B1 | підписати | pf | A2 | 325,422 |
| зайнятися B1 | займатися | impf | A2 | 323,510 |
| запропонувати B1 | пропонувати | impf | A2 | 274,648 |
| зібратися B1 | збиратися | impf | A2 | 207,282 |
Beyond the listed partners, 596 corpus-attested prefixed derivatives of the imperfective B1 verbs are in the table (перечитати, дочитати and their kind), 103 of them validated at B2 or C1. PULS and Wiktionary disagree on the aspect of 15 verbs; both readings are kept, and VESUM's is recorded as the third opinion.
Sixteen prefixes across the eight core pairs, determinate and indeterminate. 804 spellings were generated, and a cell is filled only when UberText attests the form at least a hundred times and the VESUM lexicon knows it as that infinitive: 211 of 256 cells. The level under each form is the validated one where the profile has it.
| root | в- | ви- | від- | до- | з- | за- | на- | над- | о- | об- | пере- | під- | по- | при- | про- | роз- |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ходити indet. | входитиB1 +1 | виходитиA2 | відходитиB1 | доходитиB2 | сходитиB1 +2 | заходитиA2 +1 | находити +1 | надходитиC1 | · | обходитисяB2 +1 | переходитиA2 | підходитиB1 | походитиB1 | приходити +1 | проходитиB1 +1 | розходитися |
| іти/йти det. | · | вийтиA2 | відійтиB1 | · | зійтиB1 +1 | зайтиA2 +1 | найтиC1 +1 | надійти | · | обійтисяC1 +1 | перейтиA2 +1 | підійтиB1 | пітиA1 | прийтиA2 +1 | пройтиB1 +1 | розійтисяB2 |
| їздити indet. | в'їздити | виїздити | від'їздити | доїздити | з'їздити +1 | заїздити | наїздити +1 | · | · | об'їздити | переїздитиB2 | під'їздити | поїздитиB1 | приїздитиB2 | проїздити | · |
| їхати det. | в'їхати | виїхатиB1 | від'їхати | доїхатиB1 | з'їхатиB2 +1 | заїхатиB2 | наїхати | над'їхати | · | об'їхати | переїхатиB1 | під'їхатиB1 | поїхатиA2 | приїхатиA2 | проїхатиB1 +1 | роз'їхатися |
| носити indet. | вноситиB2 +2 | виноситиB2 +1 | відноситися +1 | доносити +1 | зноситиB2 +1 | заносити +1 | наносити +1 | · | · | обносити +1 | переноситиB2 +1 | підноситиC1 +1 | поносити | приноситиB1 +1 | проноситися +1 | розносити +1 |
| нести det. | внестиB2 +1 | винести | віднестиB1 +1 | донести +1 | знестиB2 +1 | занестиB2 | нанести | · | · | обнести | перенестиB2 +1 | піднестиB2 +1 | понестиB2 +1 | принестиA2 | пронести +1 | рознести +1 |
| возити indet. | ввозитиB2 +1 | вивозитиB2 +1 | відвозити | довозити | звозити +1 | завозити +1 | навозити | · | · | · | перевозитиB2 +1 | підвозитиB2 +1 | повозити +1 | привозитиB1 +1 | провозити +1 | розвозити +1 |
| везти det. | ввезти +1 | вивезтиB2 | відвезтиB1 | довезтиB2 | звезти | завезти | навезти | · | · | · | перевезтиB1 +1 | підвезтиB2 | повезтиB1 | привезтиB1 | провезти | розвезти |
| водити indet. | вводити +3 | виводитиB2 +1 | відводити +1 | доводитисяB2 +1 | зводитиB2 +1 | заводити +1 | наводитиB1 +1 | · | · | обводити | переводити +1 | підводити +1 | поводитисяB2 +1 | приводитиB2 +1 | проводитиA2 +1 | розводитиC1 +1 |
| вести det. | ввестиB2 +1 | вивестиB2 +1 | відвестиB1 | довестисяB2 +1 | звестиB2 +1 | завестиB2 +1 | навестиB1 | · | · | обвести | перевестиB2 +1 | підвестисяB2 +1 | повестиB1 +1 | привестиB1 | провестиA2 | розвести +1 |
| бігати indet. | вбігати | вибігатиB2 | відбігати | добігати | збігатисяC1 +1 | забігати | набігати +1 | надбігати | · | оббігати | перебігати | підбігати | побігатиB1 | прибігатиB1 | пробігатиB2 | розбігатисяB2 |
| бігти det. | вбігтиC1 +1 | вибігтиB2 | відбігти | добігтиB2 | збігтисяC1 +1 | забігтиB1 | набігти | надбігти | · | оббігти | перебігти | підбігтиB1 | побігтиA2 | прибігтиB1 | пробігтиB2 +1 | розбігтися |
| літати indet. | влітати | вилітати | відлітатиB1 | долітати | злітати +1 | залітати | налітати | · | · | облітати | перелітати | підлітати | політатиB1 | прилітатиB1 | пролітатиC1 | розлітатися |
| летіти det. | влетіти +1 | вилетітиB1 | відлетіти | долетітиB2 | злетітиB2 +1 | залетіти | налетіти | надлетіти | · | облетіти | перелетітиB1 | підлетіти | полетітиB1 | прилетітиB1 | пролетітиB2 | розлетітися |
| плавати indet. | · | · | · | · | · | · | · | · | · | · | · | · | поплаватиB1 | · | · | · |
| плисти/пливти det. | вплисти | виплисти +1 | відплисти +1 | доплисти +1 | спливти +1 | заплисти +1 | напливти | · | · | · | переплисти +1 | підплисти +1 | поплистиB2 +1 | приплисти +1 | проплисти +1 | розпливтися +1 |
Aggregated over 2,880,835 parsed tokens of UberText's Wikipedia subcorpus, the one whose text is license-compatible with this release. Government is verb + preposition + case with the share of the verb's nominal dependents; a pattern is shown at ten percent or more and three observations, and the raw counts stay in the download. 365 of the 443 B1 verbs have five or more observations, 285 have twenty or more. Wikipedia has a register: дякувати does not occur.
The join keys are the PULS headwords, in VESUM's conventions. The parser's lemmas are pymorphy3's, whose Ukrainian dictionary is VESUM-derived, and the convention check holds: 99.9 percent of the B1 headwords normalize to themselves (2 do not, кошти among them), under the one-percent benchmark the plan sets. 73 percent of the parsed content tokens land on a lemma of this list; the rest is reported, never merged into the ranks.
A parser is a parser, so its error on oblique dependents is estimated rather than assumed. For 60 B1 verbs a maintainer-written list gives the textbook government (not an independent annotator, and this page says so). The corpus's top pattern is the textbook one for 59 of them, and it is in the top two for 60.
Dependency-linked pairs ranked by logDice, which is what a lexicographer uses, because raw surface bigrams surface function-word noise. 6,219 rows for 1,087 B1 lemmas, the strongest eight per lemma. The number after each collocate is its logDice.
2,919 real Wikipedia sentences for 1,497 B1 lemmas, kept verbatim under CC-BY-SA. Nothing is generated. Every sentence passed the russianism gate, the LanguageTool replacement tables that thread three already uses, run on every token; the gate is fail-closed and dropped 167 of the 5,571 candidates it checked.
These tables join on lemma strings, so the lemmatizer is not a detail. They carry pymorphy3's lemmas; the profile was built with nlp_uk and this list carries lang-uk's own, so the plan pinned a switch to nlp_uk on the assumption it would tighten the joins. Re-reading the same slice through both, one sentence at a time, the two agree on 92.6 percent of tokens and land content words on this list at 73 against 72.6 percent. The assumption was wrong, so the tables were left alone.
The gap is a convention, not an error on either side. nlp_uk treats a substantivized adjective as its own headword, so російською reads російська (the language) where this list has російський, and a capitalized first word often reads as a proper noun. Both are defensible; neither is the convention the ranks were built with.
The most frequent of 29,598 disagreement types.
A frequency list ranks lemmas, so a phrase is invisible to it. "тому що" is counted as one very common conjunction plus one very common pronoun, and nowhere as the connective it is. This table gives 142 expressions their own IDs: 63 discourse connectives from UK-DiMLex and 79 multiword entries of the two published lexical minimums, each counted over the same 4,694,436 word tokens of Wikipedia the usage tables were cut from.
The parts carry the validated levels, the unit does not: the profile levels words, not expressions. Reading the parts gives a floor, and for 87 of the 98 expressions whose every part is validated (88.8 percent) that floor is B1 or easier. A coverage figure computed word by word therefore counts them as already known, which is the gap this table exists to measure.
A floor is not a level. Таким чином is a frozen instrumental of a C1 noun and reads C1 part by part, which is as wrong for the unit as A1 would be. The column says what the parts are worth, and nothing more.
Two readings of one expression: the levels its parts carry, and the expression itself.
An independent corpus of hand-annotated Ukrainian multiword expressions (PARSEME 2.0, 5,993 annotated instances over news text) attests 35 of these 142 expressions (24.6 percent). It is read in one direction only: no expression enters this table because that corpus has it. The corpus is NonCommercial, so it is never vendored here and nothing derived from it per expression reaches the download or the package.
33 expressions are never seen in the corpus slice. Most are the everyday vocabulary a beginner register has to teach and a news corpus has little use for, which is a fact about the corpus, not a fault in the register.
Trained on the 6,403 validated labels and asked about the 5,597 lemmas that have none. Proper nouns, function words, and lemmas the lexicon does not know are ruled out of scope first, so the model predicts for 4,218 content words. Held-out folds are grouped: lemmas that share a stem, an aspect link, or a spelling (3,394 groups) never straddle train and test, so a family cannot be memorized.
| Model | Exact | Within one | Macro-F1 | MAE | QWK |
|---|---|---|---|---|---|
| majority class | 34% | 71% | 0.102 | 1.084 | 0 |
| rank band only | 34.6% | 70.9% | 0.142 | 1.081 | 0.102 |
| frequency only (ordinal) | 37.7% | 76.6% | 0.227 | 0.926 | 0.329 |
| ridge + thresholds | 39.8% | 81.5% | 0.294 | 0.82 | 0.459 |
| proportional-odds ordinal logit (shipped) | 40% | 82.3% | 0.313 | 0.806 | 0.479 |
| multinomial logistic | 40.5% | 78.3% | 0.335 | 0.877 | 0.475 |
Under plain random folds the shipped model scores 41.5 percent exact against 40 under grouped folds; the grouped figure is the one reported everywhere on this page, and the gap is the size of the leakage a naive split would have hidden.
| A frequency only | 37.7% | 76.6% | 0.227 |
| B + morphology | 39.1% | 79.5% | 0.272 |
| C + part of speech and length | 39.3% | 79.7% | 0.283 |
| D + lexicon flags and band | 39.3% | 79.7% | 0.284 |
| E + Wiktionary polysemy and loanword flag | 39.1% | 80.3% | 0.293 |
| F + subtitle and web frequency (wordfreq) | 40% | 82.1% | 0.315 |
| G + UniMorph derivational family | 40.2% | 82.3% | 0.317 |
| H + Wiktionary derived-term family (size, fold-safe lowest level) | 40% | 82.3% | 0.313 |
The labels are missing not at random: they come from textbooks, so label presence falls with rank. Held-out exact match is 40 percent in the top five thousand and 40 percent below it. Predictions in the 2 rank bands where fewer than 35 percent of lemmas carry a label ship flagged as thin support; the list is censored at rank 12,000 and nothing here extrapolates beyond it.
| rank band | 1k | 2k | 3k | 4k | 5k | 6k | 7k | 8k | 9k | 10k | 11k | 12k |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| label presence | 87.1% | 80.3% | 71.1% | 65% | 58.6% | 55.7% | 46% | 41.9% | 38.5% | 35.8% | 31.1% | 29.2% |
| held-out exact | 43.6% | 37.9% | 36.7% | 39.2% | 42.5% | 42% | 38.5% | 40.3% | 41.6% | 41.3% | 39.9% | 35.3% |
Expected calibration error of the shipped probabilities is 0.019. The abstention threshold is the lowest tested confidence at which held-out exact accuracy reaches 50 percent, a coin flip on five classes: 0.5. Below it a row ships as uncertain; 1,728 of the 4,218 predictions clear it.
| confidence at least | coverage | accuracy |
|---|---|---|
| 0.35 | 62% | 46% |
| 0.4 | 51% | 47% |
| 0.45 | 40% | 48% |
| 0.5 | 24% | 51% |
| 0.55 | 4% | 65% |
| 0.6 | 3% | 64% |
| 0.65 | 2% | 67% |
| 0.7 | 1% | 74% |
| 0.8 | 1% | 81% |
| # | Lemma | Predicted | Confidence | Status |
|---|---|---|---|---|
| 36 | український ADJ | A1 | 0.344 | uncertain |
| 68 | російський ADJ | A1 | 0.324 | uncertain |
| 109 | грн NOUN | A1 | 0.666 | confident |
| 123 | дані NOUN | A1 | 0.468 | uncertain |
| 162 | млн NOUN | A1 | 0.688 | confident |
| 175 | європейський ADJ | B1 | 0.292 | uncertain |
| 183 | проект NOUN | A1 | 0.332 | uncertain |
| 199 | посилання NOUN | B1 | 0.338 | uncertain |
| 244 | київський ADJ | B1 | 0.319 | uncertain |
| 249 | повідомлятися VERB | B2 | 0.504 | confident |
Three caveats the design owes. The single strongest feature in the French template, per-level frequencies from a graded learner corpus, does not exist for Ukrainian, so this model works from native frequency, morphology and a few open resources (Wiktionary senses and loanword flags, subtitle frequency, UniMorph families, the Wiktionary family graph) and its ceiling is structurally lower; the ablation ladder shows what each block buys. Membership in the open A1 and A2 lexical minima is computed and reported but deliberately not in the shipped model: it was the strongest weight, worth about nine points of exact match, and that lift was a graded word list read back as a feature, firing on most validated A1 labels and on almost none of the lemmas being predicted. Dispersion here is documents per occurrence; Gries DP across the five subcorpora needs per-subcorpus counts the shipped dictionary does not carry. And an LLM judgment is reserved as at most one measured feature and is not in this version.
These are candidates for the profile's authors, not levels. The validated overlay is untouched by any of them.
The profile groups its vocabulary into word families, and that grouping is not public yet. This is the open fallback: a derivational family graph built from the English Wiktionary's Ukrainian entries (kaikki.org extraction of 2026-09-20), where two words are kin when one lists the other as a derived term, one's etymology is an affix over the other, or they are listed aspect partners. Compounds are excluded so a word like високооплачуваний cannot chain високий to платити. 17,543 such edges put 4,171 of the 12,000 list lemmas into 1,919 families; the rest have no Wiktionary kin on the list.
Among the 640 families with two or more validated members, the profile places every member at the same level in only 219 (34.2 percent); 198 span two levels or more. That is the eLex paper's own point (писати at A1, its family spread across the levels), and it is why the model uses the family's lowest validated level as one feature rather than copying it.
The plan, stage by stage, with what is done and what is pinned: docs/ukrainian-frequency/b1-extension-pipeline.md
A frequency list tells you which words to learn. It does not tell you that some of the words you will meet in real Ukrainian text are ones a careful editor would replace: russianisms, surzhyk, and calques that older teaching materials quietly passed on. Thread three flags them on the exact list you study from.
There is no single settled russianism list to join against. What there is, open and maintained, is the Ukrainian idiomatic-style tooling: LanguageTool's Ukrainian replacement tables (the brown-uk project, the same one behind the VESUM morphology). This thread joins that tooling to the frequency list and, for every top-12,000 lemma it flags, shows the native alternative it recommends.
Read this the way you read thread two's open CEFR overlay: it is an OPEN, joinable signal, but an unvalidated, prescriptive one. It is what a style checker would replace, an editorial opinion, not a settled linguistic verdict. Its core is derussification, but the tooling's scope is broader than strictly-Russian loans, and a few entries (поліцейський, безкоштовний) are live usage debates. Proper-noun and spelling fixes are dropped. Every suggested form is the tooling's own, kept verbatim.
83 of the top 12,000 lemmas carry a flag from the style tooling
Of the 69 flagged forms whose native replacement is a single word, 44 (63.8%) have the flagged form at least as common in real Ukrainian text as its replacement: the idiomatic word is rarer, or not in the top 12,000 at all. That is the empirical face of older materials teaching the calque, and the corpus still carrying it.
One row per frequency band, lowest rank first. Each flagged form, the native alternative the tooling recommends, and where that alternative sits on the list. The full list is in the download.
| # | Flagged form | Recommended | Native rank |
|---|---|---|---|
| 1,257 | поліцейськийNOUN | поліційний | not in top 12,000 |
| 2,206 | прийомNOUN | приймання | not in top 12,000 |
| 3,085 | безкоштовнийADJ | безплатний | not in top 12,000 |
| 4,177 | безкоштовноADV | безплатно | not in top 12,000 |
| 5,233 | передвиборнийADJ | передвиборчий | #4,407 |
| 6,676 | держдепартаментNOUN | Держдепартамент | not in top 12,000 |
| 7,099 | місцезнаходженняNOUN | місце | #81 |
| 8,184 | властьNOUN | влада | #100 |
| 9,219 | міліцейськийADJ | міліціонер | #3,301 |
| 10,263 | подаліADV | трохи далі | a construction |
| 11,228 | затребуванийADJ | потрібний | #706 |
12 of the flagged adjectives are the active-participle calque (діючий, існуючий): the -ючий forms Russian has and standard Ukrainian rewrites as a relative clause (що діє). The tooling lists that rewrite first.
None of the 83 flagged words has been checked by a native speaker yet. Paid reviews are being commissioned; each accepted verdict will appear here with its reviewer's credit.
No answers have been accepted yet. Once they are, this card describes the people behind them: native speakers, as group counts, never as individuals.
Counts come from the intake each reviewer answers when they join. A group smaller than 3 people is never shown, not even by name, and a second group is hidden whenever one hidden group could be worked out by subtraction. Groups are shown one question at a time, never crossed.
Every thread so far has worked on the bare lemma, the dictionary headword. But a learner of a heavily inflected language does not meet headwords in text; they meet the forms. рік (year) shows up as року, роки, років, рокам. A verb has dozens of shapes. Thread four attaches those forms, and the sound, across the whole top-12,000 list.
The source is open and machine-readable: the Wiktionary declension and conjugation tables (via the kaikki.org extraction), plus the IPA and the native-speaker pronunciation audio that live in the same entries on Wikimedia Commons. Forms are kept verbatim, stress marks and all; the audio is linked, never re-hosted; and coverage is graded honestly rather than assumed.
Wiktionary + Wikimedia, CC BY-SAThe 8,553 lemmas in the top 12,000 that inflect expand to 122,021 distinct wordforms, an average of 14.3 each. Thread one measured the inflection tax as slow reading coverage; this is the same tax counted in the surface forms you actually have to recognize. A noun runs about ten forms, a verb closer to thirty.
A few high-frequency words, declined or conjugated, with IPA and open native audio. Pick a word; the forms are Wiktionary's own.
This is what turns the thread-one Anki seed from a bare headword list into a deck that teaches each word with its forms and its sound.
Ukrainian stress is free and mobile: it can land on any syllable, it moves inside a paradigm, and nothing in the spelling says where. Dictionaries mark it and running text does not, so a learner meets 12,000 lemmas with no way to say them. This thread attaches a stressed form to every row of the list. It began with an email from Andrij Rudnitsky, who pointed at the open lang-uk stress dictionary as the source.
That dictionary is the baseline, read directly from its trie and filtered by the list's own part of speech, so a bare lemma's reading is never a tagger's guess. Where it gives two readings, en.wiktionary and uk.wiktionary tell a free variant from a homograph from a minor variant; where three sources disagree, two of three decide; the few reference tiebreaks and every manual decision are ledgered in the open. No source wins by default: the Wiktionary data and the dictionary were each caught wrong.
lang-uk (MIT) + Wiktionary, CC BY-SA9,673 of the 9,920 polysyllabic common words carry one confident stress, 97.5 percent. Another 226 are labeled rather than guessed: a free variant where both stresses are accepted, a homograph where the stress is the difference between two words, a dictionary doublet no open source settles. 21 are still missing. The 1,348 proper nouns are out of scope, as most learner lists leave names out: the stress the pipeline found stays on the row, labeled, and counts toward nothing.
For these the stress is not pronunciation, it is meaning. Pick one. Where the two words are spelled differently somewhere in their paradigms, the primary is the reading whose forms occur more in UberText 2.0 and the count is shown; where they are spelled alike in every form, the primary is the first en.wiktionary entry and the row says it is unverified.
to go, to pass, to walk
to walk (:a certain distance)
A free variant: both stresses are accepted and the row says so instead of choosing for you.
Two data errors in the ukrainian-word-stress dictionary: його stored as йо́го (rank 40; the standard is його́) and підозрюватися as підозрюва́тися (підо́зрюватися). Hyphenated compounds there list the main and the secondary stress as alternative readings.
11 headwords in this site's own paradigms file inherit a wrong stress from en.wiktionary (ви́на for вина́, наре́чений for нарече́ний). They are published beside the file as corrections rather than patched into a verbatim mirror, and queued for Wiktionary.
"Confident" above means the open sources agreed; it does not yet mean a native speaker did. On 2026-10-02 a stratified random sample of 348 rows was drawn once with a published seed: 200 of the confident rows, 60 of the labeled variants and doublets, and every one of the 88 homographs. Each row goes to a paid native speaker with four answers: correct, wrong (with the form as they say it), both in use, not sure.
The rule was fixed first: the confident tier counts as validated once 150 rows are judged and the lower bound of the 95 percent interval of rows judged not wrong is at least 95 percent. A wrong verdict is a flag for the ledger, never an automatic correction.
No answers yet: 0 of 348 reviewed. The sample and the rule are the commitment.
All five threads are released. Each names the open source it is built on, and every figure on this page re-derives from a committed release. No thread claims a result it cannot show.
The top 12000 lemmas of modern Ukrainian, ranked by corpus frequency, each with its part of speech, per-mille frequency, cumulative running-text coverage, and a thousand-rank frequency band. Published as CSV and JSON, plus an Anki-importable deck seed.
Study the words that actually pay off first, in the right order, as lemmas rather than scattered wordforms. See exactly how much reading coverage a given amount of vocabulary buys.
A validated per-lemma CEFR overlay: the only corpus-validated CEFR profile for Ukrainian (Synchak et al. 2025 / PULS) joined onto the frequency list, A1 to C1, for 6403 of the top 12000 lemmas, redistributed with the authors' permission as a dated snapshot. The published paper's distribution stays cited beside it, the open course overlay is kept as a measured cross-check, and the finding holds: the validated level tracks frequency only weakly, so a frequency rank is not a proficiency level.
Study the high-frequency words in validated CEFR order, see which half of the list has a validated level and how far it reaches, and see how weakly proficiency level and raw frequency actually line up.
Flag non-idiomatic forms on the list and pair each with the native alternative the open Ukrainian style tooling recommends (LanguageTool's replacement tables, brown-uk, backed by the VESUM morphology). The core is derussification (russianisms, surzhyk, the active-participle calque); the honest scope is broader, and it is fenced as an unvalidated, prescriptive signal, not a settled verdict.
Learn the idiomatic word, not the calqued one that older materials quietly teach, and see how often the calque is actually the more common form in real text.
Attach a pronunciation and the inflection paradigm to the top 12000 lemmas, from the open Wiktionary declension and conjugation tables (kaikki.org) and open Wikimedia pronunciation audio, so a lemma is taught as its forms rather than a bare headword. Coverage is graded honestly (it thins with rank), and the inflection multiplier is measured.
Hear the word, see how it changes across the seven cases and the aspect pairs (the part inflection makes hard), and see how many wordforms the words you are learning actually expand to.
A self-scoring yes or no vocabulary-size test drawn from this list: 60 real lemmas and 60 constructed pseudowords, stratified across the 12 frequency bands, scored with the standard false-alarm correction and mapped onto the coverage curve. No Ukrainian equivalent exists off the shelf.
Measure your vocabulary against a real proficiency proxy instead of guessing, and see roughly how much running text that vocabulary actually unlocks.
A stressed form for every one of the 12000 lemmas: the open lang-uk stress dictionary read by the list's own part of speech, en.wiktionary and uk.wiktionary to tell free variants, homographs and minor variants apart, a two-of-three vote where the sources disagree, and a ledger of every manual decision. Where there is one answer it is given; where there are more, the row says so instead of guessing.
Say the words you are learning right from the first day, see where the stress is the difference between two words, and trust a label that says when there are two answers.
Paste a Ukrainian text and see how much of it a learner can read: running-text coverage against a validated CEFR level or against what a class has actually covered (a pasted list, an uploaded CSV, the Borodin minimums, stacked and named), with the gloss list of what is left. Three counts are reported together, strict as the headline and the aspect-linked and family-linked readings as a range beneath it, with the specific words where the family assumption breaks flagged. A course reading list comes back as a sequence plan (cumulative new-word load, recycled words, orphans, a suggested order that respects pins). Validated against 29 level-marked course texts, and the result is published as it came out. Ships in Ukrainian and English editions; nothing pasted leaves the browser.
Check a text against your own class before you assign it, get the gloss list in one click, order a semester's readings so each one costs the fewest new words, and see exactly where the profiler is and is not to be trusted.
Everything on this page re-derives from these files. They are versioned and hashed. The list is CC-BY: use it, fork it, build on it.
The lemmas.anki.tsv file imports straight into Anki as a frequency deck seed.
v0.2.0 is v0.1.0 with a reviewed cleanup ledger applied to the same source: of the v0.1.0 rows, 18 were dropped, 68 merged into the lemma they belong to, and 86 entered from below the cut, so 11182 kept rows changed rank. Every table on this page now joins on v0.2.0 ranks. v0.1.0 stays frozen and archived; anything keyed on its ranks migrates through the crosswalk shipped with this release.
Browse the previous release →pip install ukvocabpip install ukvocab ships this list, the validated CEFR overlay, the two minimums, the crosswalk and the B1 tables as Parquet, with lookup, batch levels and coverage; every value carries its source and snapshot.
POST /api/lemmatize returns the VESUM headword, part of speech and tags per token in this list's convention, rate-limited, nothing retained; the contract and the round-trip check against this list are published.
GET /api/uk/lookup/<word> answers any form of a word from memory: stress, validated level, rank, course gloss, open audio and the dmklinger/ukrainian definitions (CC BY-SA 3.0), as JSON or as plain text for a watch.
Lawrence, J. (2026). Ukrainian Frequency: a lemma-based, coverage-graded open frequency list (v0.2.0). jakelawrence.xyz/research/ukrainian-frequency. Derived from UberText 2.0 (Chaplynskyi, 2023).
These checks re-run in your browser against the shipped numbers. If any fails, the release is inconsistent and the page says so.
A weekly review reads the deployed pages, downloads and APIs against this repository: every published hash served as promised, the lookup and lemmatizer answering as the committed round-trip says, the Zenodo, PyPI and Hugging Face registries in step, and the clocks on every dated figure. Its verdict lands here, with the open items by name.
The frequency signal is the UberText 2.0 lemma frequency dictionary (lang-uk). This release re-publishes derived aggregate counts, which are facts, not the source corpus text. Rows are filtered to Ukrainian-Cyrillic-alphabetic lemmas carrying a linguistic Universal Dependencies part of speech; punctuation, symbols, digit tokens, foreign or unclassified tokens, and single-character proper nouns are dropped.
Coverage is recomputed here from raw occurrence counts, not read from the source file's own frequency columns, whose normalization is undocumented. Frequency bands are transparent thousand-rank bins and are NOT CEFR levels; validated CEFR alignment is thread two, which profiles the one validated resource rather than inventing levels. The corpus is news and reference heavy, so war-era and civic vocabulary rank prominently. That is disclosed, not smoothed away.
Part of a standing effort to close the digital-tooling gap for the Ukrainian language.
I build the AI tools and automations a team adopts, and the full-stack apps and data pipelines under them, and ship them to production. Tell me the problem in a sentence and I'll give you an honest read on fit within a day.
Work with me →