An analysis of 1,955 CBSE Class XII question papers (2022 to 2026) that measures how often high-mark questions reuse the same wording. This post uses only the derived aggregate tables, not the question text.
Open-Source Tools · How-To · Govt data & research ops
How to use CBSE_paper_patterns: check which Class 12 topics keep coming back at high marks
Revised
· v1.0.0 · what changed
Code: github.com/herrrickshaw/CBSE_paper_patterns
Watch the walkthrough
Watch on YouTube: youtu.be/PnWtmpgs4Hg
Why it is useful
- Teachers, students and tutors get an evidence-based answer to 'do the papers repeat?' by subject, instead of coaching-industry folklore.
- It replaces gut feeling with one number per subject: the share of marks in 4-mark-or-higher questions sitting on a phrase that recurs in at least 3 of 5 exam years.
- The result is uneven: Accountancy 49%, Physics 44%, Economics 38% versus Chemistry and Biology at 5%. The repo explains this measures repeated wording, not repeated concepts.
- Evidence from the run: the subject table and the mined topic list load from CSV in seconds and match the README; the heavy corpus rebuild was not run.
What it is for
The repo mines 2 to 4 word phrases that recur across at least three exam years in high-mark questions, and reports a repetition index per subject. It also documents paper structure, syllabus coverage and three parsing traps for anyone processing CBSE PDFs.
This post uses only the derived tables in data/ (subject_repetition.csv and recurring_topics.csv phrase counts). It does not reproduce question text.
Who it is for
- Teachers and tutors planning revision emphasis by subject
- Researchers studying exam design and assessment patterns
- Data people who want a worked example of parsing messy PDF exam papers
- Predicting next year's paper: lexical repetition is not a guarantee that a topic will appear
- Skipping syllabus topics. Revise the whole syllabus; this is a descriptive pattern, not advice on what to leave out
- Redistributing CBSE question papers: they remain CBSE's copyright (see limits)
What you need
| Requirement | Why | How to get it |
|---|---|---|
| Python 3.9+ | Reading the aggregate CSVs needs only the standard library | python.org |
| git | To clone the repo (about 246 MB because it carries the corpus) | git-scm.com; use a shallow clone (git clone --depth 1) to save time |
| A Mac plus a 6 GB download (for the full rebuild only) | README steps fetch about 6 GB of PDFs and use macOS Vision OCR for scans | Not needed for this post and not run |
Get the code and an AI assistant
You do not have to be a programmer. Get the repository, give it to an AI assistant, and ask in plain language. Any of these routes works:
| Tool | What you need | Best for |
|---|---|---|
| GitHub | Free account to fork or star; git to clone, or the green Code button, then Download ZIP, or open in Codespaces | Getting the code and keeping up with updates |
| Claude Code | Claude subscription or API key; run claude inside the cloned folder | Letting the AI read and run the whole repo |
| Gemini CLI | Google account; run gemini inside the cloned folder | The same hands-on workflow with Gemini |
| Claude.ai, Gemini or ChatGPT in the browser | A chat account; upload README.md and the files you care about (or paste the output of git ls-files) | Understanding the project and asking questions without installing anything |
| Other tools (Copilot Chat, Cursor, Codex CLI) | Open the cloned folder in the tool and point it at README.md first | Editing and extending the code |
git clone https://github.com/herrrickshaw/CBSE_paper_patterns.git
cd CBSE_paper_patterns
claude # or: gemini
Install
- Shallow-clone the repository
git clone --depth 1 https://github.com/herrrickshaw/CBSE_paper_patterns.git cd CBSE_paper_patterns - No install is needed to read the aggregates:
ls data/
Quick start: commands and what you should see
Read the repetition index by subject
python3 -I -c "import csv;[print(r['subject'],r['papers'],round(float(r['repetition_index'])*100)) for r in csv.DictReader(open('data/subject_repetition.csv'))]"
One line per subject with paper count and repetition percentage.
List the recurring content topics for one subject
python3 -I topics_for.py Physics # 8-line filter on data/recurring_topics.csv, kind=content_topic
Phrases with the years they recurred in, number of papers and total marks (see sample output).
Sample outputs
Real output from a run on the date shown in the sources line; trimmed to fit.
Repetition index by subject (data/subject_repetition.csv, read 19 October 2026)
python3 -I print_index.py
Subject Papers Questions High-mark Qs Repetition index
Accountancy 50 1,020 109 49%
Physics 64 1,266 120 44%
Economics 61 1,269 173 38%
Mathematics 62 1,072 90 22%
Business Studies 54 1,035 119 16%
History 67 1,569 167 16%
Geography 60 1,036 229 14%
Political Science 60 989 200 7%
Chemistry 72 1,384 133 5%
Biology 62 1,373 169 5%
English Core 72 757 259 0%
Matches the table in the README. Only the top rows were re-derived from the CSV; the rest were read as printed.
Recurring physics topics (data/recurring_topics.csv, content_topic rows, phrase counts only)
python3 -I topics_for.py Physics
phrase years year_list papers marks
electric field 4 2023,2024,2025,2026 14 84
magnetic field 4 2023,2024,2025,2026 11 73
parallel plate capacitor 3 2024,2025,2026 10 55
refractive index 3 2024,2025,2026 8 54
field due 3 2024,2025,2026 7 35
Example question text in the CSV is deliberately not shown here.
Recurring accountancy topics
python3 -I topics_for.py Accountancy
phrase years year_list papers marks
partners firm 3 2023,2025,2026 14 139
balance sheet 3 2024,2025,2026 20 139
firm sharing profits 3 2023,2025,2026 13 121
calculate cash 3 2024,2025,2026 9 57
investing activities 3 2024,2025,2026 9 57
firm was dissolved 3 2022,2025,2026 7 41
Overlapping phrases (partners firm / firm sharing profits) are one topic seen through different n-grams.
Ways to use it
| Method | How it works |
|---|---|
| Read the analysis | analysis/topic_recurrence.md, paper_structure.md and syllabus_vs_papers.md explain the method and findings. |
| Load the CSVs | data/subject_repetition.csv, recurring_topics.csv, question_type_mix.csv and paper_structures.csv in pandas or a spreadsheet. |
| Reuse the parsing lessons | The three traps (reprinted options, Hindi-medium mojibake, exam sets counted as separate papers) apply to any PDF exam corpus. |
| Through an AI assistant | Ask an assistant to explain the index or chart it for a school staff meeting. |
Sample prompts for your AI assistant
Copy, paste and edit the parts in [brackets].
- Read analysis/topic_recurrence.md and explain in plain English what the repetition index does and does not measure.
- Load data/subject_repetition.csv and make a bar chart of the index by subject, with a note that it measures wording, not concepts.
- Why does Chemistry score 5% while Physics scores 44%? Quote the repo's explanation.
- Summarise the three parsing traps for a developer starting a similar project on another board's papers.
- Compare data/question_type_mix.csv across Physics and Accountancy and describe the difference in plain terms.
Limits and honest caveats
- Only the derived aggregate CSVs were used. The 6 GB corpus download, the parsing scripts and the OCR step were not run.
- The index measures lexical repetition, not conceptual repetition; the repo itself warns that Chemistry and Biology are understated.
- Marks across the full archive are regex-parsed and approximate; only the 32-paper subset is checked against stated maximums.
- Hindi-medium and image-only papers are only partly recovered; 8 files still lack text.
- Copyright: the repo's description says papers are not redistributed, but the README says the corpus Markdown of CBSE question papers is included for research use under a take-down offer. Check CBSE's terms yourself before reusing the corpus text.
- Do not treat recurring topics as a reason to skip other syllabus content. This is a descriptive analysis, not exam or educational advice.
Sources: the CBSE_paper_patterns README, analysis/topic_recurrence.md, data/subject_repetition.csv and data/recurring_topics.csv, read and filtered on 19 October 2026 from a fresh clone. No scripts were run on the corpus.
- v1.0.0 — 28 October 2026 — first published.
About this article: Researched, written and edited by Umashankar Triplicane Dwarakanathan, with AI research assistance; every figure is meant to trace to the primary source cited. See the Editorial Policy for how sourcing, AI use and corrections work.