Which poly teaches the course you want?
Pick a field and a course to see which of Singapore's 5 polytechnics list it, and what last year's students scored. 105 of 136 course titles are taught at only one poly. From MOE's 2027 JAE course list.
Find a course
Which polys offer Nursing?
Field: Health Sciences.
Nanyang Polytechnic and Ngee Ann Polytechnic list it. Republic Polytechnic, Singapore Polytechnic and Temasek Polytechnic do not.
Most course titles, 105 of 136, are taught at only one poly. This one is taught at 2.
- Nanyang Polytechnic
Code C97 · score type ELR2B2-C
Scores of students posted in 20267 to 28 - Ngee Ann Polytechnic
Code N69 · score type ELR2B2-C
Scores of students posted in 20266 to 28 - Republic Polytechnic
Does not list it.
- Singapore Polytechnic
Does not list it.
- Temasek Polytechnic
Does not list it.
A score is the net ELR2B2 aggregate: a smaller number is a better O-Level result. Each range runs from the highest-ranked student MOE posted to the course in 2026 to the last one. It shows who got in last year, not how good a course is, and 2027 can differ.
Other Health Sciences courses
No other course title shares a word with Nursing, so these are other Health Sciences courses. Tap one to look it up.
NYP Nanyang, NP Ngee Ann, RP Republic, SP Singapore, TP Temasek.
What does each poly teach, by field?
The number of courses each poly lists in each field. Darker means more. A dash means none. The field of your pick is outlined.
| Field | NYP | NP | RP | SP | TP | All 5 |
|---|---|---|---|---|---|---|
| Applied Sciences | 6 | 6 | 6 | 6 | 7 | 31 |
| Built Environment | 1 | 1 | 1 | 5 | 2 | 10 |
| Business & Management | 9 | 8 | 12 | 5 | 11 | 45 |
| Engineering | 10 | 8 | 5 | 8 | 6 | 37 |
| Health Sciences | 2 | 2 | 5 | 1 | – | 10 |
| Humanities | 1 | 4 | 1 | – | 3 | 9 |
| Information & Digital Technologies | 5 | 5 | 6 | 4 | 6 | 26 |
| Maritime Studies | – | 1 | – | 2 | – | 3 |
| Media & Design | 4 | 6 | 6 | 2 | 6 | 24 |
| All fields | 38 | 41 | 42 | 33 | 41 | 195 |
Business & Management is the biggest field, with 45 of the 195 courses. Maritime Studies is the smallest, with 3. Some polys list nothing in a field: Temasek has no Health Sciences course and Singapore has no Humanities course.
What score did it take to get in last year?
Each dot is the score of the last student a poly posted to your pick in the 2026 JAE. A smaller score is a stronger O-Level result.
Last year, the last student posted to Nursing scored 28 at Nanyang Polytechnic and 28 at Ngee Ann Polytechnic.
A score reflects how many people applied and how they did, not whether a course is good or which poly is better. Scores for 2027 can differ.
Fun finds
The short version
Polytechnic courses in Singapore for the 2027 JAE: the 5 polytechnics list 195 courses under 136 different titles, and 105 of those titles are taught at only one poly. 5 titles are taught at all five polys: the four common programmes and Cybersecurity & Digital Forensics. Scores are the 2026 JAE results printed in MOE's 2027 course list.
Pick a field and a course to see which polys list it, with the scores of the highest-ranked and the last student posted in 2026, the options listed inside it, and similar titles at any poly. Course titles are matched by exact name, so a course with a different name at another poly shows up under similar titles instead.
This lists what each poly offers and what last year's scores were. It is not a ranking and it says nothing about how good any poly or course is.
By Ben (opens in a new tab). Updated . Data: MOE, 2027 JAE course list.
Questions people ask
Which polytechnic offers nursing?
2 of the 5 polytechnics: Nanyang Polytechnic (C97) and Ngee Ann Polytechnic (N69). Applicants need a net ELR2B2 score of 28 or better for either. In 2026 the students posted to Nursing scored 7 to 28 at Nanyang and 6 to 28 at Ngee Ann. Republic, Singapore and Temasek do not list a course called Nursing.
How many polytechnic courses are there in Singapore?
For the 2027 JAE the 5 polytechnics list 195 courses under 136 different titles: Nanyang 38, Ngee Ann 41, Republic 42, Singapore 33, Temasek 41. 26 of the 195 are common programmes, broad entry courses that students choose a path from later.
Which polytechnic courses are taught at only one poly?
105 of the 136 course titles. The number of titles that only one poly lists: Nanyang 22, Ngee Ann 20, Republic 24, Singapore 15, Temasek 24. Pick a field and a course in the finder above to see each one.
Which courses do all five polytechnics offer?
Four common programmes (Business, Engineering, ICT and Science) and Cybersecurity & Digital Forensics. 3 more titles are listed by four polys: Aerospace Engineering, Applied AI & Analytics and Pharmaceutical Science.
Which polytechnic offers aerospace engineering?
Nanyang Polytechnic, Ngee Ann Polytechnic, Republic Polytechnic and Temasek Polytechnic list a course called Aerospace Engineering. Singapore Polytechnic does not use that title. It lists Aeronautical Engineering (S88) and Aerospace Electronics (S90). Check each course's own page to see how the content differs.
What were the polytechnic cut-off points for 2026?
Scores are not set in advance. MOE's list shows, for each course, the scores of the highest-ranked and the last student posted in the 2026 JAE. Of the 193 courses with 2026 scores, 25 had a last student posted at 10 or lower and 19 at 26 or higher. Scores for 2027 can differ.
What is a common programme?
A broad entry course, such as the Common ICT Programme, where students pick a path or a specialisation later. 26 of the 195 courses are common programmes, and the finder shows the options MOE lists inside each.
The numbers behind it
| Course title | Field | Polys | Which polys |
|---|---|---|---|
| Common Business Programme | Business & Management | 5 | NYP, NP, RP, SP, TP |
| Common Engineering Programme | Engineering | 5 | NYP, NP, RP, SP, TP |
| Common ICT Programme | Information & Digital Technologies | 5 | NYP, NP, RP, SP, TP |
| Common Science Programme | Applied Sciences | 5 | NYP, NP, RP, SP, TP |
| Cybersecurity & Digital Forensics | Information & Digital Technologies | 5 | NYP, NP, RP, SP, TP |
| Aerospace Engineering | Engineering | 4 | NYP, NP, RP, TP |
| Applied AI & Analytics | Information & Digital Technologies | 4 | NYP, NP, RP, SP |
| Pharmaceutical Science | Applied Sciences | 4 | NYP, NP, RP, TP |
| Applied Chemistry | Applied Sciences | 3 | NYP, RP, SP |
| Banking & Finance | Business & Management | 3 | NYP, NP, SP |
| Biomedical Engineering | Engineering / Applied Sciences | 3 | NYP, NP, TP |
| Biomedical Science | Applied Sciences | 3 | NP, RP, SP |
| Electrical & Electronic Engineering | Engineering | 3 | RP, SP, TP |
| Hospitality & Tourism Management | Business & Management | 3 | NYP, RP, TP |
| Information Technology | Information & Digital Technologies | 3 | NP, RP, TP |
| Accountancy | Business & Management | 2 | NP, SP |
| Accountancy & Finance | Business & Management | 2 | NYP, TP |
| Aerospace Electronics | Engineering | 2 | SP, TP |
| Architecture | Built Environment | 2 | NYP, SP |
| Aviation Management | Business & Management | 2 | RP, TP |
| Business | Business & Management | 2 | RP, TP |
| Computer Engineering | Engineering | 2 | SP, TP |
| Design | Media & Design | 2 | NP, RP |
| Early Childhood Development & Education | Humanities | 2 | NP, TP |
| Electronic & Computer Engineering | Engineering | 2 | NYP, NP |
| Human Resource Management with Psychology | Business & Management | 2 | RP, SP |
| Mass Communication | Media & Design | 2 | NP, RP |
| Mechanical Engineering | Engineering | 2 | NP, SP |
| Mechatronics & Robotics | Engineering | 2 | NP, SP |
| Nursing | Health Sciences | 2 | NYP, NP |
| Optometry | Health Sciences | 2 | NP, SP |
| Course | Poly | Field | Scores posted in 2026 |
|---|---|---|---|
| Biomedical Science | NP | Applied Sciences | 3 to 7 |
| Biomedical Science | SP | Applied Sciences | 3 to 7 |
| Medical Biotechnology | TP | Applied Sciences | 3 to 8 |
| Applied AI & Analytics | SP | Information & Digital Technologies | 5 to 8 |
| Biomedical Science with Analytics | NYP | Applied Sciences | 6 to 8 |
| Applied Chemistry | SP | Applied Sciences | 3 to 9 |
| Banking & Finance | NP | Business & Management | 3 to 9 |
| Veterinary Technology | TP | Applied Sciences | 3 to 9 |
| Common Science Programme | NP | Applied Sciences | 4 to 9 |
| Psychology Studies | TP | Humanities | 4 to 9 |
| Oral Health Therapy | NYP | Health Sciences | 5 to 9 |
| Pharmaceutical Science | NP | Applied Sciences | 5 to 9 |
| Common Science Programme | SP | Applied Sciences | 7 to 9 |
| Business Studies | NP | Business & Management | 3 to 10 |
| Engineering Science | NP | Engineering | 3 to 10 |
| Applied Chemistry | NYP | Applied Sciences | 4 to 10 |
| Aerospace Engineering | TP | Engineering | 5 to 10 |
| Law & Management | TP | Business & Management | 5 to 10 |
| Pharmaceutical Science | TP | Applied Sciences | 5 to 10 |
| Psychology & Community Development | NP | Humanities | 5 to 10 |
| Applied AI & Analytics | NYP | Information & Digital Technologies | 7 to 10 |
| Pharmaceutical Science | NYP | Applied Sciences | 7 to 10 |
| Biomedical Engineering | NP | Engineering | 8 to 10 |
| Biomedical Science | RP | Applied Sciences | 8 to 10 |
| Environmental & Marine Science | RP | Applied Sciences | 8 to 10 |
| Course title | Field | Which polys |
|---|---|---|
| Accountancy | Business & Management | NP, SP |
| Accountancy & Finance | Business & Management | NYP, TP |
| Advanced & Digital Manufacturing | Engineering | NYP |
| Aeronautical Engineering | Engineering | SP |
| Aerospace Electronics | Engineering | SP, TP |
| Aerospace Engineering | Engineering | NYP, NP, RP, TP |
| AI & Data Engineering | Engineering | NYP |
| AI Robotics | Engineering | NYP |
| Animation, Games & Visual Effects | Media & Design | NYP |
| Applied AI & Analytics | Information & Digital Technologies | NYP, NP, RP, SP |
| Applied Artificial Intelligence | Information & Digital Technologies | TP |
| Applied Chemistry | Applied Sciences | NYP, RP, SP |
| Architectural Technology & Building Services | Built Environment | TP |
| Architecture | Built Environment | NYP, SP |
| Arts & Entertainment Production Management | Media & Design | RP |
| Arts Business Management | Business & Management | NP |
| Aviation Management | Business & Management | RP, TP |
| Banking & Finance | Business & Management | NYP, NP, SP |
| Big Data & Analytics | Information & Digital Technologies | TP |
| Biological Sciences | Applied Sciences | RP |
| Biomedical Engineering | Engineering / Applied Sciences | NYP, NP, TP |
| Biomedical Science | Applied Sciences | NP, RP, SP |
| Biomedical Science with Analytics | Applied Sciences | NYP |
| Biopharmaceutical & Chemical Engineering | Applied Sciences | NYP |
| Business | Business & Management | RP, TP |
| Business & Financial Technology | Business & Management | NYP |
| Business Administration | Business & Management | SP |
| Business Management | Business & Management | NYP |
| Business Process & Engineering Management | Business & Management | RP |
| Business Process & Systems | Business & Management | TP |
| Business Studies | Business & Management | NP |
| Chemical & Biological Engineering | Applied Sciences | SP |
| Chemical & Biomolecular Engineering | Applied Sciences | NP |
| Chemical Engineering | Applied Sciences | TP |
| Chinese Media & Communication | Media & Design | NP |
| Chinese Studies | Humanities | NP |
| Civil Engineering | Built Environment | SP |
| Cloud Engineering | Engineering | NYP |
| Common Arts, Media & Design Programme | Media & Design | RP |
| Common Business & Technology Programme | Engineering | NYP |
| Common Business Programme | Business & Management | NYP, NP, RP, SP, TP |
| Common Design & Media Programme | Media & Design | NYP |
| Common Design Programme | Media & Design | TP |
| Common Engineering Programme | Engineering | NYP, NP, RP, SP, TP |
| Common ICT Programme | Information & Digital Technologies | NYP, NP, RP, SP, TP |
| Common Media Programme | Media & Design | NP |
| Common Science Programme | Applied Sciences | NYP, NP, RP, SP, TP |
| Common Sports & Health Programme | Health Sciences | RP |
| Communication & Motion Design | Media & Design | NYP |
| Communication Design | Media & Design | TP |
| Communications & Media Management | Business & Management | TP |
| Computer Engineering | Engineering | SP, TP |
| Computer Science | Information & Digital Technologies | SP |
| Computing | Information & Digital Technologies | NYP |
| Computing with Law | Information & Digital Technologies | NP |
| Consumer Insights & Psychology | Business & Management | RP |
| Culinary Arts & Management | Business & Management | TP |
| Cybersecurity & Digital Forensics | Information & Digital Technologies | NYP, NP, RP, SP, TP |
| Defence & Security Management | Business & Management | RP |
| Design | Media & Design | NP, RP |
| Digital Content Creation | Media & Design | RP |
| Digital Film & Television | Media & Design | TP |
| Early Childhood Development & Education | Humanities | NP, TP |
| Electrical & Electronic Engineering | Engineering | RP, SP, TP |
| Electrical Engineering | Engineering | NP |
| Electronic & Computer Engineering | Engineering | NYP, NP |
| Engineering | Engineering | RP |
| Engineering Science | Engineering | NP |
| Engineering with Business | Engineering | SP |
| Enterprise Cloud Computing & Management | Information & Digital Technologies | RP |
| Environmental & Marine Science | Applied Sciences | RP |
| Environmental Science & Sustainability | Applied Sciences | NP |
| Events & Project Management | Business & Management | RP |
| Experience Design | Media & Design | NYP |
| Facilities Management | Built Environment | SP |
| Fashion Management & Design | Media & Design | TP |
| Film, Sound & Video | Media & Design | NP |
| Financial Technology | Information & Digital Technologies | RP |
| Food & Beverage Business | Business & Management | NYP |
| Food Science & Nutrition | Applied Sciences | NYP |
| Food Science & Technology | Applied Sciences | SP |
| Food, Nutrition & Culinary Science | Applied Sciences | TP |
| Game Development & Technology | Information & Digital Technologies | NYP |
| Hospitality & Tourism Management | Business & Management | NYP, RP, TP |
| Hotel & Leisure Facilities Management | Built Environment | NP |
| Hotel & Leisure Management | Business & Management | RP |
| Human Resource Management with Psychology | Business & Management | RP, SP |
| Immersive Media & Game Development | Information & Digital Technologies | TP |
| Information Technology | Information & Digital Technologies | NP, RP, TP |
| Integrated Community Care | Health Sciences | RP |
| Integrated Events & Project Management | Built Environment | SP |
| Integrated Facility Management | Built Environment | TP |
| Interior Architecture & Design | Media & Design | TP |
| Interior Design | Media & Design | SP |
| International Trade & Business | Business & Management | NP |
| International Trade & Logistics | Business & Management | TP |
| Landscape Architecture | Built Environment | SP |
| Landscape Design & Horticulture | Applied Sciences | NP |
| Law & Management | Business & Management | TP |
| Marine Engineering | Maritime Studies | SP |
| Maritime Business | Maritime Studies | SP |
| Marketing | Business & Management | TP |
| Mass Communication | Media & Design | NP, RP |
| Mechanical Engineering | Engineering | NP, SP |
| Mechatronics | Engineering | TP |
| Mechatronics & Robotics | Engineering | NP, SP |
| Media & Communication Management | Business & Management | NYP |
| Media, Arts & Design | Media & Design | SP |
| Medical Biotechnology | Applied Sciences | TP |
| Mobility & Robotic Systems | Engineering | RP |
| Nursing | Health Sciences | NYP, NP |
| Offshore & Sustainable Engineering | Maritime Studies | NP |
| Optometry | Health Sciences | NP, SP |
| Oral Health Therapy | Health Sciences | NYP |
| Outdoor Education | Humanities | RP |
| Perfumery & Cosmetic Science | Applied Sciences | SP |
| Pharmaceutical Science | Applied Sciences | NYP, NP, RP, TP |
| Product Experience & Design | Media & Design | TP |
| Psychology & Community Development | Humanities | NP |
| Psychology Studies | Humanities | TP |
| Real Estate Business | Business & Management | NP |
| Restaurant & Culinary Management | Business & Management | RP |
| Social Sciences in Gerontology | Humanities | TP |
| Social Work | Humanities | NYP |
| Sonic Arts | Media & Design | RP |
| Sport & Exercise Science | Health Sciences | RP |
| Sport & Wellness Management | Business & Management | NYP |
| Sport Coaching | Health Sciences | RP |
| Sports & Health | Health Sciences | RP |
| Stage & Live Events | Media & Design | NP |
| Supply Chain Management | Business & Management | RP |
| Sustainability in Engineering with Business | Engineering | NYP |
| Sustainable Built Environment | Built Environment | RP |
| Tamil Studies with Early Education | Humanities | NP |
| Tourism & Resort Management | Business & Management | NP |
| Veterinary Technology | Applied Sciences | TP |
The boring bit
Where the data comes from
MOE's course list for the 2027 Joint Admissions Exercise (JAE), a PDF, downloaded 10 Oct 2026. We read the five polytechnic sections: Nanyang, Ngee Ann, Republic, Singapore and Temasek. The junior college and ITE sections were left out. The scores are the "net ELR2B2 range for previous (2026) JAE", which MOE describes as the aggregate of the highest to the lowest ranked students admitted in 2026.
What is not claimed
- Course titles are matched by exact name, ignoring capitals and treating "&" as "and". Courses that cover similar ground under different names, such as Aerospace Engineering and Aeronautical Engineering, are different titles here. Only the "similar titles" list tries to link them, by shared words in the title, with a few spelling pairs joined by hand (aerospace and aeronautical, accounting and accountancy, AI and artificial intelligence). It can miss courses and can link some that are not alike.
- We count courses MOE lists with their own code. A course that students can reach as an option inside a broader course, such as a common programme, at a poly that does not list it separately is not counted as offered there. The options inside each course are shown as MOE prints them.
- Only full-time diploma courses that O-level students enter through the JAE are here. Part-time and adult-learner courses, and other routes in, are not in MOE's list.
- Scores are from the 2026 JAE only. MOE says they are a reference and that scores are not set in advance, so 2027 can differ.
- 2 courses are new for 2027 and have no 2026 scores. They are counted in the 195 courses but not in the 193 that have scores.
- The score type (the letter after ELR2B2) is MOE's. We show it as printed and do not explain which subjects it counts.
- Fields are MOE's own headings. One title, Biomedical Engineering, sits in Engineering at some polys and Applied Sciences at others, so it is listed in both.
- Fees, course content, class sizes and jobs after graduation are not in this list. This is not a ranking, and a poly with more courses, or a course with a lower score, is not better.
Coverage
All 5 polytechnic sections were read: 195 courses, Nanyang 38, Ngee Ann 41, Republic 42, Singapore 33, Temasek 41. 193 of the 195 have 2026 scores. They make 136 different titles.
Report an error. Corrections are logged publicly with a date.
How we did it
- Converted the PDF to text with pdftotext, keeping the column layout, so each course stays on its line.
- Cut out the five polytechnic sections. Each starts at its "Entry requirements of courses to" heading and ends where the next begins. The last one ends where the ITE section starts.
- Read each course line with a pattern: the title, the course code, the score type and the 2026 range (or a dash for a new course). Titles that wrap onto a second line, or sit above the code, have their own rules, and the footnote symbols are removed.
- Took the bullets under a course as its options, and the capitalised heading above it as its field. The pages are read one at a time, so options never run into the next course.
- Matched titles across polys by exact name and counted how many polys list each one.
- Checked the totals against each poly's own list: Nanyang 38, Ngee Ann 41, Republic 42, Singapore 33, Temasek 41.
Show the Python code
import collections, re
POLYS = [('NANYANG POLYTECHNIC', 'NYP'), ('NGEE ANN POLYTECHNIC', 'NP'), ('REPUBLIC POLYTECHNIC', 'RP'),
('SINGAPORE POLYTECHNIC', 'SP'), ('TEMASEK POLYTECHNIC', 'TP')]
# a course line: the title, the course code, the score type and the 2026 range ("-" for a new course)
COURSE = re.compile(r'^(?P<left>.*?\S)\s{2,}(?P<code>[A-Z]\d{2,3})\*?\s+(?P<type>ELR2B2-[A-D]|ELB4-[A-D]|ELR1B3-[A-D])\s+(?P<rng>\d+\s+to\s+\d+\*?|-)(?:\s{2,}|$)')
CODE_ONLY = re.compile(r'^\s+(?P<code>[A-Z]\d{2,3})\*?\s+(?P<type>ELR2B2-[A-D]|ELB4-[A-D]|ELR1B3-[A-D])\s+(?P<rng>\d+\s+to\s+\d+\*?|-)(?:\s{2,}|$)')
MARKS = '①-⑳-Ⓐ-ⓩ' # footnote symbols the PDF draws as characters
HEADINGS = ('COURSES', 'NANYANG POLYTECHNIC', 'NGEE ANN POLYTECHNIC', 'REPUBLIC POLYTECHNIC', 'SINGAPORE POLYTECHNIC', 'TEMASEK POLYTECHNIC')
def parse(text):
lines = text.split('\n')
starts = {}
for i, l in enumerate(lines): # each polytechnic section starts under "ENTRY REQUIREMENTS OF COURSES TO"
if 'ENTRY REQUIREMENTS OF COURSES TO' in l:
for j in range(i + 1, i + 4):
for name, ab in POLYS:
if lines[j].strip() == name:
starts[ab] = j
assert len(starts) == 5, starts
ite = [i for i, l in enumerate(lines) if l.strip() == 'INSTITUTE OF TECHNICAL EDUCATION']
order = sorted(starts.items(), key=lambda kv: kv[1])
bounds = {}
for k, (ab, s) in enumerate(order): # a section ends where the next begins; the last one where the ITE section starts
after = [i for i in ite if i > s]
e = order[k + 1][1] if k + 1 < len(order) else (min(after) if after else len(lines))
bounds[ab] = (s, e)
rows = []
for ab, (s, e) in bounds.items():
field, cur = '', None
for i in range(s, e):
l = lines[i]
if '\f' in l:
cur = None
l = l.replace('\f', '')
st = l.strip()
mo = CODE_ONLY.match(l)
if mo and not COURSE.match(l): # the title sits on the line above the code
prev = lines[i - 1]
title = re.split(r'\s{3,}', prev.strip())[0]
cur = dict(poly=ab, field=field, code=mo.group('code'), title=title, type=mo.group('type'), rng=mo.group('rng'),
notes=[], indent=len(prev) - len(prev.lstrip()))
rows.append(cur)
continue
m = COURSE.match(l)
if m:
indent = len(l) - len(l.lstrip())
cur = dict(poly=ab, field=field, code=m.group('code'), title=m.group('left').strip(), type=m.group('type'), rng=m.group('rng'),
notes=[], indent=indent)
rows.append(cur)
j = i + 1 # a long title wraps onto the next line
while j < e and lines[j].strip() and not COURSE.match(lines[j]):
part = lines[j][indent:indent + 42].rstrip().strip()
if not part or lines[j][:indent].strip():
break
if re.match(r'^(At the end|\(|•|Specialisations|This is|The first|Course Title|These|Note|Common|\*|Subject|\d)', part) or part.startswith('Notes'):
break
if len(part) <= 34 and len(lines[j]) - len(lines[j].lstrip()) == indent and not part.endswith(':'):
cur['title'] += ' ' + part
j += 1
else:
break
continue
if st and re.fullmatch(r"[A-Z&,\-' /\(\)]{6,}", st) and st not in HEADINGS and not st.startswith('ELR') \
and 'ENTRY REQUIREMENTS' not in st and 'COURSES TO' not in st and len(l) - len(l.lstrip()) < 12:
field, cur = st, None # a capitalised heading is a field
continue
if cur is not None: # bullets under a course are the options inside it
left = l[cur['indent']:cur['indent'] + 42].strip() if len(l) > cur['indent'] else ''
lind = len(l) - len(l.lstrip())
if left.startswith('•'):
cur['notes'].append(left.lstrip('• ').strip())
cur['open'] = True
elif left and cur.get('open') and cur['notes'] and cur['indent'] < lind < cur['indent'] + 40 \
and not left.startswith(('Specialisations', 'Dip', 'The first', 'At the end')):
cur['notes'][-1] += ' ' + left
else:
cur['open'] = False
out = []
for r in rows:
low = high = None
if r['rng'] != '-':
low, high = [int(x) for x in re.findall(r'\d+', r['rng'])[:2]]
title = re.sub(r'\s+', ' ', re.sub('[' + MARKS + ']', '', r['title'])).strip()
out.append(dict(poly=r['poly'], code=r['code'], title=title, field=r['field'].title(), aggregate=r['type'], low=low, high=high,
common=title.lower().startswith('common '), new=r['rng'] == '-',
options=[re.sub(r'\s+', ' ', re.sub('[' + MARKS + ']', '', n)).strip() for n in r['notes']]))
return out
def same_title(t):
"""Two courses have the same title when the names match, ignoring capitals and treating "&" as "and"."""
return re.sub(r'\s+', ' ', t.lower().replace('&', 'and')).strip()
def count_titles(rows):
polys = collections.defaultdict(set)
for r in rows:
polys[same_title(r['title'])].add(r['poly'])
return len(polys), sorted(collections.Counter(len(v) for v in polys.values()).items())
# usage: text = open("jae2027.txt", encoding="utf-8").read() (from: pdftotext -layout jae2027.pdf jae2027.txt)
# rows = parse(text); print(len(rows), "courses"); print(count_titles(rows)) # 195 courses; (136, [(1, 105), (2, 16), (3, 7), (4, 3), (5, 5)])
No machine learning was needed. The question was "who lists what", which reading the list and counting answers directly.
Sources: MOE 2027 JAE course list (opens in a new tab) (PDF), downloaded 10 Oct 2026. More on MOE's JAE page (opens in a new tab).