Inspiration
Korean learners often struggle to tell whether a text really matches their level. I wanted to build a tool that estimates difficulty while also explaining why a text feels easy or difficult.
What it does
HanLevel classifies Korean text as Beginner, Intermediate, or Advanced and gives a 0–100 score. It breaks the result down into vocabulary, grammar, and sentence length, while also showing challenging words, structural markers, and dictionary coverage.
How we built it
HanLevel was built with Python, Streamlit, and Kiwi/kiwipiepy. Vocabulary is matched with learner-level data from the Korean Learners’ Dictionary, while grammar and sentence structure are scored through rule-based linguistic indicators.
Challenges we ran into
The biggest challenge was the dictionary data. API requests were unreliable, while the full downloadable KRDICT data was about 969 MB. I created a preprocessing script that reduced it to a 1.79 MB compact index containing only the fields HanLevel needs.
Accomplishments that we're proud of
HanLevel became a complete working web app with an interpretable NLP pipeline, transparent scoring, vocabulary and grammar analysis, internal calibration, and a public Streamlit deployment.
What we learned
I learned a lot about Korean morphological analysis, designing interpretable NLP systems, handling large linguistic resources, and turning a scoring prototype into a deployable product.
What's next for HanLevel
Next, I want to explore AI-assisted features such as text simplification, level-based adaptation, vocabulary and grammar explanations, comprehension questions, and broader external evaluation.
Built With
- github
- json
- kiwi
- kiwipiepy
- korean
- natural-language-processing
- python
- streamlit
Log in or sign up for Devpost to join the conversation.