How teerin27/subtitle-cefr-recommender-movie works
CEFR Cinema is intended to recommend movies suited to an English learner’s proficiency: analyze subtitle difficulty, generate collaborative-filtering candidates, then rerank for level fit and explain recommendations. The checked-in runtime is still a walking skeleton: the web page calls a hello endpoint, and the API exposes that endpoint plus health. The README documents the broader ML workflow, but its modeling and recommendation implementation is not present in the sampled source; those links are documented product flow, not verified runtime calls.
Main entry points: hello.py Hello endpoint · ml Level-aware reranking · main.py App factory · page.tsx Home page
Components 18
Web interface
- Home page
web/app/page.tsx - API client
web/lib/api.ts - Web contract
web/lib/types.ts
API service
- App factory
api/app/main.py - Runtime settings
api/app/config.py - Hello endpoint
api/app/routers/hello.py - Hello response
api/app/schemas/hello.py - Health endpoint
api/app/routers/health.py - Health response
api/app/schemas/health.py
Data ingestion
- MovieLens data
data/raw/movielens - Subtitle data
data/raw/opensubtitles - Corpus download
ml/ingestion/download.py - Subtitle indexing
ml/ingestion/opensubtitles_index.py
Recommendation workflow
Other components
- Learner
Connections 17
- Learner → Home page: uses
web/app/page.tsx - Home page → API client: calls
web/app/page.tsx - API client → Hello endpoint: requests
web/lib/api.ts - App factory → Runtime settings: loads
api/app/main.py - App factory → Hello endpoint: registers
api/app/main.py - App factory → Health endpoint: registers
api/app/main.py - Hello endpoint → Runtime settings: reads
api/app/routers/hello.py - Hello endpoint → Hello response: returns
api/app/routers/hello.py - Health endpoint → Health response: returns
api/app/routers/health.py - MovieLens data → Candidate generation: provides ratings
README.md - Subtitle data → Difficulty analysis: provides subtitles
README.md - Corpus download → Subtitle data: acquires corpus
- Subtitle indexing → Difficulty analysis: prepares subtitles
- Difficulty analysis → Level-aware reranking: supplies level
README.md - Candidate generation → Level-aware reranking: supplies candidates
README.md - Level-aware reranking → Recommendation reasons: supports reasons
README.md - Level-aware reranking → Home page: returns recommendations
README.md