-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Four small, focused command-line tools that answer the questions English teachers and materials writers ask about texts: how hard is this text, and for whom?
-
Vocabulary profiler (
vocab_profile.py) — what CEFR level (A1–C2) the words of a text sit at, and how much of it is academic vocabulary (Coxhead's AWL and the NAWL). Dependency-free Python 3. -
Grammar profiler (
grammar_profile.py) — which grammatical constructions a text uses (tenses, the passive, relative clauses, conditionals, modals, and ~70 more) and what CEFR level each maps to, using the CEFR-J Grammar Profile. Rule-based over a spaCy parse — no AI. -
Text report (
text_report.py) — runs both profilers and answers "is this text right for my class?" in one summary: vocabulary band + grammar range + a blended estimated level, and with--target-level B1the exact words and structures above the class, a coverage figure, and a ready-made pre-teaching handout / RubricMaker deck (--export md|csv|flashcards). -
Class profile (
class_profile.py) — scales from one text to a whole folder of candidate readings: profile every text in one run, rank and filter the set by level ("which of these suits B1?" is one command), print a spreadsheet-ready CSV summary, and export the distinct vocabulary of each CEFR band for glossaries — the dashboard's class-level view, from the CLI.
Read together, they describe a text's difficulty far better than either alone: an article can be A2 on vocabulary but B2 on grammar (heavy passive + relative clauses), and only the pair reveals that.
| I want to… | Go to |
|---|---|
| See real classroom scenarios with inputs and outputs | Use Cases |
| Understand where the tools are heading | Roadmap |
| See how this fits alongside RubricMaker | RubricMaker Alignment |
| Install and run the tools | README |
| Check the word-list sources & licences | WORDLISTS.md |
| See every grammar construction and its level | GRAMMARPROFILE.md |
Profile the vocabulary of a sentence:
python3 vocab_profile.py --type cefr --text "Yesterday I walked to the shop to buy bread and milk."Typical: A1 90% coverage: A1
■ A1 88% ■ Off List 12%
Profile the grammar of a sentence:
python3 grammar_profile.py --text "If I had known, I would have helped."Typical: B1 Reaches: B1
B1 Third conditional ×1 · Past perfect ×1
(Grammar profiling needs spaCy; construction levels follow the CEFR-J Grammar Profile — see GRAMMARPROFILE.md.)
Answer "is this text right for my B1 class?" for one text:
python3 text_report.py --text "The researchers analysed the implications." --target-level B1And for a whole folder — "which of these suits B1?":
python3 class_profile.py --file essays/ --max-level B1 --format csvThe single-text tools read from --text, a --file (.txt, .md, .docx,
.pdf), or stdin; the class profile takes a directory or glob as its
--file. All emit human-readable pretty output in a terminal or
machine-readable JSON when piped — so the same commands serve a teacher at
the prompt and a script feeding a gradebook.
Everything the tools report is anchored to the Common European Framework of Reference (CEFR) — the A1→C2 scale most of the world's language teaching runs on — so the profilers, the text report, the class profile, and the RubricMaker grading platform, all speak the same language:
| Vocabulary profiler | Grammar profiler | |
|---|---|---|
| Question | Which words are hard? | Which structures are used? |
| Scale | CEFR A1–C2 · AWL · NAWL | CEFR A1–C2 (CEFR-J Grammar Profile) |
| Method | Word-list matching (deterministic) | Rule-based over a spaCy parse (no AI) |
| Dependencies | Python 3 only | Python 3 + spaCy |
| Output | Per-word banding + distribution | Per-construction banding + examples |
On top of those two sit the combined views: the text report answers "is this text right for my class?" in one verdict (with pre-teaching exports), and the class profile answers "which of these texts is right for my class?" over a whole folder — the two questions a teacher actually asks.
Neither is a readability formula (Flesch–Kincaid and friends). They report what the text is made of, band by band — which is what a teacher choosing a reading, or a rubric checking an essay, actually needs.
Vocabkitchen (https://vocabkitchen.com/) is a language-teaching application by jegarne that lets teachers take a text, adjust it to a target vocabulary level, and build activities from it. This fork lifts the profiling slice out of that app and turns it into small, install-free tools you can run anywhere — on the command line, or inside a Claude Code / Cowork session via the bundled plugins.
Vocabkitchen CLI — vocabulary & grammar profilers for the EFL classroom. CEFR-anchored, rule-based, no AI. · Companion to RubricMaker.