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

Share this project:

Updates

Submission history