Sunday, September 4, 2011

Improving the user experience in Kiten, guest post

Note: Today's guest post brought to you by Daniel Moctezuma.

Improving the user experience in Kiten

As part of Google Summer of Code 2011 I worked on improving Kiten in various aspects:
1. Write a better deinflection system
2. Add more filtering options
3. Update EDICT and KANJIDIC dictionaries
4. Write a Kanji Browser tool to help users learn kanji
5. Bugfixes and code polishing

Before going deep in each point, I would like to tell you what Kiten is (in case you haven't heard about it).
Kiten is a Japanese Reference Tool that consists mainly of a Dictionary and a Radical Selector, it uses the EDICT (for vocabulary) and KANJIDIC (for kanji) dictionaries.
The Dictionary lets you translate from japanese to english and from english to japanese, this means you can write in english, hiragana, katakana or kanji to search in the dictionaries.
The Radical Selector lets you to search for a kanji by filtering its radicals, this way you can find a kanji without knowing anything about its readings or meanings.

With this GSoC project, Kiten is now more than that.

1. Deinflection system
Kiten now has a better deinflection system that deconjugates a verb/adjective and gives you the result of it. Example: 笑った is the past tense form of 笑う (to laugh), but (like in any language) if you search a past tense verb in a dictionary you will not find it. So Kiten can deconjugate the input and search for it.
You might wonder, "but why is this necessary?", the truth is that some japanese language learners can be confused of some verb tenses, so they might not know the dictionary form of a verb. Kiten can help you with that and give you feedback about your input, so next time you will know if you entered a verb in past tense or so.
2. Add more filtering options
This improvement helps users to filter results that "start/end with" or "contain" what the user entered to be searched. Also it shows the results in a better order:
  • exact match
  • words starting with the user's input
  • words ending with the user's input
  • words containing (anywhere/in the middle) the user's input
It helps a lot to have order in what we see, most of the time the user wants to know the meaning for a exact match, but also it is good to know if a word is used different, as at the end of an expression or somehow in the middle.

3. Update EDICT and KANJIDIC dictionaries
For some years Kiten was not being maintained regarding dictionaries, now that has changed with this improvement. These dictionary files are the core of Kiten and having the latest updates of them is a must. As part of the project, the user is now able to update the dictionaries at any time (if an update is available).
4. Write a Kanji Browser tool to help users learn kanji
You can browse all the kanji available in the KANJIDIC dictionary and be able to search by Grade and Number Strokes. Just click on the kanji and you can access detailed information such as stroke order, onyomi/kunyomi readings, meanings, grade, etc.
This tool helps you to learn Kanji by Jouyou Grade, in other words, KanjiBrowser can filter kanji by grade difficulty so you will only see those in the current grade you are interested in learning.
5. Bugfixes and code polishing
This includes various areas of Kiten like libkiten maintenance, bugs in the dictionary, etc.
Just to name a few:
  • You can add more dictionaries (EDICT/KANJIDIC format), as well as having deinflection system compatibility with them.
  • Libkiten can be considered mature now.
  • Fixed memory leaks.
  • Code simplification (for better performance and readability).
  • Clear separation between common/uncommon entries.
  • and more.
So, now we can say Kiten is not only a Japanese Reference Tool, but a Set of Tools:
  1. Dictionary (Japanese <---> English)
  2. Radical Selector
  3. Kanji Browser

Also I am proud to say this contribution is now merged on the master branch and expected to be released in KDE 4.8 along with other contributions from the KDE community.

Finally I would like to thank the following people:
  • Jeremy Whiting, for being my mentor in this project.
  • Anne-Marie Mahfouf, for her support since the beginning.
  • Joseph Kerian (previous Kiten developer/maintainer), for his support on some questions I had about the code base.
  • KDE, for choosing my proposal and for letting me have this amazing experience.
  • Google, for Free Software Development promotion by paying to students and encouraging them to learn and contribute to our world.
Thanks a lot!

Daniel E. Moctezuma