#!/usr/bin/env python3
"""Look up approximate equivalences between ACTFL, CEFR and ILR levels, with what each level can do.
Alignments are approximate (based on ACTFL's published CEFR alignment for its tests and common ILR practice) and
differ by skill; never use them to convert an individual's score for high-stakes decisions.
Usage:
python level_map.py "Intermediate High" # ACTFL sublevel (case-insensitive; IH, AL... also work)
python level_map.py --cefr B2
python level_map.py --ilr 2
python level_map.py --table
Exit codes: 0 found, 2 unknown level.
"""
import argparse
import sys
# ACTFL, short, CEFR, ILR, functions, text type
ROWS = [
("Novice Low", "NL", "Pre-A1", "0", "Isolated words; no real functional ability", "Words"),
("Novice Mid", "NM", "Pre-A1", "0+", "Memorised words and phrases on familiar topics", "Words, lists, phrases"),
("Novice High", "NH", "A1", "0+", "Mostly memorised language, some recombination; simple personal information", "Phrases, some simple sentences"),
("Intermediate Low", "IL", "A2", "1", "Create with language; simple Q&A in predictable everyday situations", "Discrete sentences"),
("Intermediate Mid", "IM", "A2", "1", "Handle uncomplicated tasks and social situations; ask and answer questions", "Strings of sentences"),
("Intermediate High", "IH", "B1", "1+", "Narrate and describe in major time frames, but not consistently", "Connected sentences, emerging paragraphs"),
("Advanced Low", "AL", "B1", "2", "Narrate and describe in past, present and future; handle a complication", "Paragraphs"),
("Advanced Mid", "AM", "B2", "2", "Narrate and describe with control and detail across time frames", "Connected paragraphs"),
("Advanced High", "AH", "B2", "2+", "Perform Advanced tasks with ease; emerging Superior functions", "Extended paragraphs"),
("Superior", "S", "C1", "3", "Support opinions, hypothesise, discuss abstract topics", "Extended discourse"),
("Distinguished", "D", "C2", "4", "Tailor language to audience; persuade; cultural and historical references", "Extended, sophisticated discourse"),
]
def show(r):
print(f"ACTFL {r[0]} ({r[1]}) ~ CEFR {r[2]} ~ ILR {r[3]}")
print(f" Functions: {r[4]}")
print(f" Text type: {r[5]}")
def main():
ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
ap.add_argument("actfl", nargs="?", help="ACTFL level or abbreviation")
ap.add_argument("--cefr", type=str.upper)
ap.add_argument("--ilr")
ap.add_argument("--table", action="store_true")
a = ap.parse_args()
if a.table:
print("| ACTFL | CEFR | ILR | Text type |\n|-------|------|-----|-----------|")
for r in ROWS:
print(f"| {r[0]} | {r[2]} | {r[3]} | {r[5]} |")
return 0
if a.actfl:
key = a.actfl.strip().lower()
hits = [r for r in ROWS if key in (r[0].lower(), r[1].lower())]
elif a.cefr:
hits = [r for r in ROWS if r[2].upper() == a.cefr]
elif a.ilr:
hits = [r for r in ROWS if r[3] == a.ilr.strip()]
else:
ap.print_usage(sys.stderr)
return 2
if not hits:
print("error: unknown level", file=sys.stderr)
return 2
for r in hits:
show(r)
print("\nApproximate alignment: varies by skill (reading and listening ratings align differently from speaking).")
return 0
if __name__ == "__main__":
sys.exit(main())
academic-english-eap-course-planner
Plan English for Academic Purposes (EAP) courses: pre-sessional, in-sessional, foundation, IELTS preparation and discipline-specific EAP, with syllabus strands (academic reading, lecture listening and note-taking, essay and report writing, paraphrase, summary and synthesis, referencing and plagiarism, seminars and presentations, academic vocabulary, critical thinking), a 10-week pre-sessional outline, exit assessment, IELTS-CEFR alignment and academic style (formality, hedging, cohesion, reporting verbs). Estimates study hours and weeks to close an IELTS gap from overall or per-skill scores (IELTS rounding, minimum per skill, priority skills, feasibility before a deadline), and checks learner texts for contractions, informal words with academic alternatives, unhedged claims, 'you', And/But/So starts, rhetorical questions and missing citations.
adult-literacy-esl-lesson-builder
Build lessons for adult ESL learners who are developing literacy (LESLLA learners: pre-literate, non-literate, semi-literate, literate in a non-Roman script): learner profiles and sensitive initial assessment, principles (oral language first, known to new, systematic phonics with adult-relevant text, repetition, classroom skills, respect for experience), a lesson routine (oral warm-up, review, new grapheme, blending, segmenting, decodable text, writing, functional literacy, Language Experience Approach), a phonics sequence for adults, sight words, functional literacy targets (forms, signs, medicine labels) and portfolio assessment. Checks whether a reading text is decodable with the letter-sound patterns and sight words taught so far, catching untaught digraphs, listing non-decodable words with the untaught part, and suggesting the most useful next patterns.
authentic-material-lesson-adapter
Turn authentic material (news articles, podcasts, videos, songs, menus, timetables, adverts, social media posts, forms, infographics) into language lessons by grading the task rather than the text. Selects texts for interest, relevance, exploitability, coverage, cultural load and rights; finds the 4-6 words to pre-teach, words to gloss on the page and words learners can ignore, plus names and cultural references to explain, with reading time by level; and builds a lesson shape (lead-in, pre-teach, gist or scanning, graded detail task, language focus on chunks and register, response) with task ideas per material type and level from A1 to C1. Covers copyright, fair dealing and fair use, Creative Commons and attribution.
can-do-statement-writer
Write and review can-do statements for language courses, units, lessons and learner self-assessment, CEFR or NCSSFL-ACTFL style: action (observable verb) + text or situation + level-specific conditions, learner ('I can') and descriptor ('Can') versions, progressions of one activity from A1 to C1, and coverage of reception, production, interaction and mediation. Includes a verb bank by mode and level and condition and text-type banks. Lints statements for teacher-centred phrasing, knowledge instead of use (learn, know, understand the passive), missing context, two skills in one statement, vague quality words, grammar items as outcomes, overlong statements and missing modes in a set.
cefr-aligned-syllabus-builder
Build language course syllabuses aligned to the CEFR (A1-C2, plus levels, Companion Volume 2020): entry and exit levels, guided learning hours and course length (with an L1-distance adjustment), syllabus type (topic, functional-notional, task-based, skills-based, multi-strand), unit-by-unit can-do outcomes, grammar from a core inventory by level, vocabulary, functions, pronunciation, balance of reception, production, interaction and mediation, recycling and assessment points. Checks a syllabus for units without can-do statements, core grammar for the level not covered, items above the course level, skills missing from most units and units with no vocabulary or functions.
classroom-management-for-esl-coach
Coach ESL/EFL teachers in classroom management: the instruction sequence (attention, group first, graded imperatives, demonstration, ICQs, hand out, start, check), ICQ examples, online instructions, routines for the first weeks (class agreement, L1 use, phones, lateness, homework, seating), strategies for L1 use in tasks, dominant and quiet learners, mixed levels, large classes, fast finishers, low motivation, disruptive young learners and teens, cultural expectations, classroom language to teach early and teacher presence. Checks planned instructions for length, missing ICQs, useless ICQs like 'Do you understand?', no demonstration, long sentences, filler and missing grouping or timing, and builds seating plans that keep named learners apart, seat learners who need the front, mix first languages and alternate stronger and weaker learners.