kanji: Perform 漢字検定 (Japan Kanji Aptitude Test) level analysis on Japanese Kanji

[ bsd3, data, library, program ] [ Propose Tags ]

Perform 漢字検定 (Japan Kanji Aptitude Test) level analysis on Japanese Kanji.

[Skip to Readme]
Versions 1.0.0, 2.0.0, 3.0.2, 3.1.0,, 3.2.0, 3.2.1, 3.3.0, 3.4.0
Change log CHANGELOG.md
Dependencies aeson (>=1.2 && <1.4), aeson-pretty, base (>=4.7 && <5), containers, deepseq, hashable, kanji, microlens (==0.4.*), microlens-aeson (>=2.2 && <2.4), microlens-platform, optparse-applicative (==0.14.*), protolude (==0.2.*), text [details]
License BSD-3-Clause
Copyright 2011 - 2018 Colin Woodbury
Author Colin Woodbury
Maintainer colingw@gmail.com
Category Data
Home page https://github.com/fosskers/kanji
Uploaded by fosskers at Tue Mar 13 19:57:22 UTC 2018
Distributions LTSHaskell:, NixOS:3.4.0, Stackage:3.4.0, openSUSE:
Executables kanji
Downloads 840 total (42 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-03-13 [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees

Readme for kanji-

[back to package description]


kanji is a Japanese Kanji library and analysation program written in Haskell. Its main function is to tell what Kanji belong to what Level of the Japanese National Kanji Examination (漢字検定).

kanji can be used to:

  • determine what Level individual Kanji belong to
  • determine the average Level (difficulty, in other words) of a group of Kanji
  • apply the above to whole files of Japanese


First, get the source files from:


kanji is written in Haskell and uses the stack tool. Once stack is installed, move to the source directory and perform:

stack install


Assuming you've made it so that you can run the executable, the following command-line options are available:

Usage: kanji [-u|--unknowns] [-d|--density] [-e|--elementary] [-l|--leveldist]
             [-a|--average] [-s|--splits] ((-f|--file ARG) | JAPANESE)

Available options:
  -h,--help                Show this help text
  -u,--unknowns            Find Kanji whose Level couldn't be determined
  -d,--density             Find how much of the input is made of Kanji
  -e,--elementary          Find density of Kanji learnt in elementary school
  -l,--leveldist           Find the distribution of Kanji levels
  -a,--average             Find the average Level of all Kanji present
  -s,--splits              Show which Level each Kanji belongs to
  -f,--file ARG            Take input from a file


  • All options above can be mixed to include their analysis result in the output JSON.
  • -h will over-ride any other options or arguments, discarding them and printing a help message.


Single Kanji

$> kanji -s 日
    "levelSplit": {
        "Ten": [

A Japanese sentence

$> kanji -s これは日本語
    "levelSplit": {
        "Nine": ["語"],
        "Ten": ["本", "日"]

All options

$> kanji -leadus これは日本語
    "levelSplit": {
        "Nine": ["語"],
        "Ten": ["本", "日"]
    "elementary": 1,
    "average": 9.666667,
    "density": 0.5,
    "unknowns": [],
    "distributions": {
        "Nine": 0.33333334,
        "Ten": 0.6666667