Download for Windows Download for Linux Download for FreeBSD Download for Mac Manual Wiki Forum IRC Trac

Friday, October 10, 2008

Kanjimemo brainstorming and input request


[Text above added to try to attract some attention to this post]

Ever since I've posted about Kanamemo, there have been quite a few requests for a "Kanjimemo", a tool based on the same idea, but for Kanji.

Even before, I had considered writing something like that... But I never started because I couldn't quite figure out all the details on how it'd work. On this post, I'll talk about some of the ideas that I had for it. If you're interested in a "Kanjimemo", please leave your feedback and suggestions in the comments!

Programming Language

First of all, I'm not sure which programming language to write it in. At first, I considered C++, since that would be the easiest for me and allow the maximum flexibility, at least as far as PCs are concerned. The problem is that I'm already fairly experienced with C++, and so it wouldn't be much of a learning experience (which is always a plus :)) unless I went for Direct3D.

Then I pondered about Java: with all the cell phones supporting J2ME, it seemed like a good idea - Kanjimemo on the go? Great! The real problem came when I realized that J2ME is *REALLY* limited - you often have less than 1 MB of heap memory available (!) for your application, which makes a program like Kanjimemo almost impossible to implement. I also lack a J2ME-enabled cell phone, so I couldn't even work on a J2ME port right away.

A few other languages crossed my mind. C# is something that I've always wanted to learn, but its cross-platform support is quite bad (I'm looking at you, Mono). It's also much slower than Java. Python is another "to learn" language, but I question the sanity of doing complicated data analysis on such a high level and slow language... Plus all the horrible dependencies. Same goes for Ruby.

So, any thoughts on the "language barrier" might be useful.


On to how the program would ACTUALLY work... Learning kanji is nowhere as easy as learning kana. The problem with kanji is that most of them have multiple (typically two) readings, depending on the word... but some (like 日, one of the most basic kanji) can have many more. So my idea is to have an algorithm that works like this:

  1. Select a group of five or so kanji for each level (like Kanamemo)
  2. Mine EDICT for all words marked as [Common] that use that kanji
  3. Perhaps attempt to extract the pronunciation of your kanji on that word? If that doesn't work, just go with individual words.
  4. Create a list of all the different unique pronunciations and associated words.
  5. Have the user learn all the unique pronunciations, preferably by using words that contain nothing but that kanji and kana.
  6. If there's no word with that kanji by itself, make sure that the user already "learned" all the other kanji in the word displayed.
 Of course, steps 3 and 6 might be very tricky to code. All of this will require mining data from EDICT and possibly KANJIDIC. If it becomes necessary, I might use a SQLite database to store this information.

Progression would work similarly to Kanamemo, with a new set of 5 kanji unlocked with each memorized set. Ideally, the user could choose profiles to control the new kanji: perhaps follow the JLPT progression, or the japanese school system progression, or how common a given kanji is, or a combination of them (i.e. start with all JLPT4 kanji sorted by frequency, then all JLPT3 sorted by frequency, etc). The user should also be able to customize a list of kanji that he wants to learn.

Given this system, it'd be possible to simply consider kana as being kanji, and have the program work in the same way for those, so you'd be entering actual japanese words when learning kana. This has the advantage of making your japanese reading skill progress.

Multiple fonts
One problem that I noticed with kanamemo is that it was easy to just memorize the font glyph, as opposed to the more abstract shape of the kana. This could prove to be an issue with kana that are very different depending on how they're written (such as さ and ふ). This program would fix that problem by using different types of fonts (cursive, brush, type) randomly, or perhaps by forcing you to learn all the different variation before progressing.

Since the concept of the program is word-focused, it might feel strange to be learning how to read words without learning what they mean. If you're an anime watcher, then perhaps you already have a relatively big vocabulary of words, but you won't know all of them, and not everyone is an anime watcher. EDICT provides translations, but I'm not sure if just slapping the translations there will do any good... Thoughts on this?

Finally, it might be useful to have someone read the words out loud for you whenever you get them right. I'm not sure how hard it would be to add support for some third-party voice synthesizer, but it might be worth the trouble.

Other ideas
Perhaps the program should be designed to look more like a game? A little mascot cheering for you, a scrolling background, some background music? Perhaps this game could have multiple "stages" that you would do in alternating order: First learn to read the kanji, then what the word means, then perhaps a speed typing test? Maybe even a grammar test mode?

Of course, what this needs the most right now are IDEAS! If you have any, please share them with us. If you know of somebody who might be interested in this sort of thing, link them to this page! If you want to help with the development itself, drop by IRC and let us know. The idea is that this should be an open, free project.

Related Posts by Categories


  1. You could do it in C#/Mono with a GTK# user interface. This would allow it to run on all platforms supported by GTK and Mono, and you'd probably learn a lot. Mono 2.0 was recently released and it supposedly offers a ton of improvements.

  2. The problem is that GTK is quite horrible under Windows.

  3. wxWidgets can also be used with Mono/C# :

  4. I've been looking for such a program for a while now, never found one I really like.

    I think it's really important to allow the user to enter a custom list or kanji since every single book or course has its own order.

    Turning the whole thing into a game may give extra motivation to some, but other might want to study kanji while doing something else (like watching a so-so anime series or pretending to be earning their living) and will prefer a very simple interface. Having two different programs using the same progress data might be a solution.

    About the translations, I believe they must be learned too, but kanji usually convey a general idea or two, and their meaning change when they're used in different verbs/nouns... Also, when asked for the translation of a word, you might think of a synonym of the 'answer' and will end up being very frustrated... Querying a synonym dictionnary is probably overkill though. Just having a few translations displayed when a correct reading is entered might be enough to actually remember the meaning of the character/word.

    Special readings are another frustrating thing, you may know 今 and 日 perfectly, but that doesn't mean you can write "kyou". Having the program ask for special reading when you know the two or three kanji composing the word is important, i belive.

    Another interesting thing to do is making sure the learner doesn't mix up kanji that kinda look the same (牛 午 and 年 for example) by incresing the probability that kanji known but similar to an unknown one appear. For example, if you failed on 午, 年 and 牛 are very likely to appear in the next few draws (though it probably wouldn't be fair to decrease your score for the "look-alike" kanji). To get this working you'd need to use some kind of OCR, and i'm not sure wether it's worth the extra dependencies or not. (I'm not even sure how well OCR works with kanji.)

    Yet another aspect of learning kanji, is learning to write them, in the right order and with the correct number of strokes, but once again, it requires some kind of visual recognition and is probably not worth the effort since most people only want to be able to *read* kanji.

    Sorry for the wall of text >_>;

  5. Thanks for the feedback. On the "mixup" thing, Kanamemo implemented the following algorithm: every kana starts at 0 points. You must reach 3 points to "learn" it and 10 to "master" it. When you learn all on a given level, you get another batch of 5 kana, and the more you know it, the less it will show up in the future. When you mix up two (say that it shows さ and you enter "chi"), it deduces 10 points from both. I found this to be very effective as it forced the "problem" kana to show up a lot, both of them, ensuring that I learned the difference between them.

    For kanji, this would be a lot trickier, since there would be no easy way to tell WHICH kanji the user mistook it for, but it's something to consider...

  6. Oh, and about using wx for C#, I don't think that I even want something with an user interface similar to that of traditional apps... besides, since I already know wx, I'd be tempted to just use C++ for that. :)

  7. For programming languages, well, it depends on your goal and you didn't make this clear. Does it need to be something new? It seems to me like C++ would be best suited for the program, mostly for performance reasons. If traydict is any indicator, searching through EDICT can be pretty slow.

    3 does seem like it would be difficult, I have a few ideas but I'd need a giant pile of tests to see if it actually works.

    Why is 6 hard? You have your new kanji, the word your are checking, and a list of kanji the user has learned. Check that all kanji except your new kanji are in the learned list. Maybe I am missing something?

    I might be interested in contributing, give me a poke if you get anything started.

  8. Well, six might be tricky because it might be that a kanji "up next" in the list doesn't show up in any words that don't involve more advanced kanji, and we can even get a deadlock here: It's possible that kanji A only shows up in combination with kanji B, and vice-versa. If that does happen, we'd be forced to teach both at once.

    For performance, it's likely that all relevant data would be precomputed (and perhaps stored in a SQLite database?), so I don't think that it will matter much.

  9. Maybe I should point out that I'm now considering using Python for this.

  10. I've decided to just stop trying to do things the hard way and go with C++ (if that statement sounds contradictory to you, you should take into account the fact that I'm insane).

  11. <--- slow

    Anyway, for different displays, I'd suggest using the 6 "main" font styles, "Gothic", "Kaisho", "MaruGothic", "Mincho", "Pop" and "Textbook".

    You can see the differences in hiragana on the following page.

    Also, I suggest that you set up options for how many points the user wants to have to get to "Master" a kana/kanji. Also, an import function for different setups of kanji. You could have your system of 5 at a time, an option to have them appear in the JLPT order and in the order of James W. Heisig (See: ) -- And an ability/function for users to build these themselves. (Maybe some place where you can get more/different settings?)

    Just a couple things that I think would be great to include. :3

  12. Thanks, I'm sure that site will be handy. :)

    Being able to customize your own Kanji list is pretty much a given, and will be one of the first features.

  13. The main point of that was for it being exportable and share-able if other people would perhaps want it. (Maybe someone would make it for a textbook and someone else has the same book, #2 wouldn't have to reassign all the kanji again, but could rather import the already-made order. :)

  14. My idea is that it would list "profiles". On that same screen, you could add, remove or edit profiles.

    Each profile would also list how much % through it you are. So, for example, it would ship with a few standard profiles like JLPT4, JLPT3, Grade 1, Grade 2, etc... Completing one would also count as progress for others.

    Perhaps the program would let you enable or disable profiles as in a checkboxes, so you could study more than one at a time (although nothing stops you from studying one, then the other, as progress on the first would count towards the shared kanji in the second).

  15. [Oh, and yes, profiles would be simple .txt files that you can just share.]

  16. I don't know if anyone is still keeping up with this thread over two months later, but I'll post anyway...

    Anyway, as far as content, I would consider following the Japanese Kanji Certification test (日本漢字能力検定) steps rather than the JLPT. The JLPT doesn't really focus that much on kanji, plus only four (4) steps means a lot groups together. The "Kanken" (漢検) goes from level 10 to level 1, with a level 2.5 and 1.5 for a total of 12 steps; Of course level 10 being the lowest.

    The problem is finding the breakdown of kanji/level. Short of buying (importing) some practice books/tests, I'm not sure how you'd find the breakdown.

    Here's the official Kanken site: But unless you're already pretty fluent in Japanese, you probably won't be able to navigate it very well.


  17. Thanks for sharing your info. I really appreciate your efforts and I will be waiting for your further write.
    Thanks for sharing !
    tanki online 2 | 2048 game online

  18. Wonderful blog! I found it while searching on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there! Many thanks.
    2048 online | tanki online 3

  19. Oh, and about using wx for C#, I don't think that I even want something with an user interface similar to that of traditional apps... besides, since I already know wx, I'd be tempted to just use C++ for that. :) madalin stunt cars 2

  20. This blog is so nice to me. I will continue to come here again and again. Visit my link as well. Good luck
    obat aborsi
    cara menggugurkan kandungan
    obat penggugur kandungan
    obat telat datang bulan

  21. This article is very great, its content is the most unique and its website design is also very good. The speed of the website is also fast. I very much liked to share the blog very much thanks.

  22. "He's as sweet as a horse you'll ever come by," Zayat said. "You could bring kids up coach outlet store online to him, and he'll just put his head on them. He knows who he is. I call him a humble champion."

    American Pharoah joined the exclusive club of Triple Crown winners Sir Barton (1919), Gallant Fox (1930), Omaha (1935), War Admiral (1937), Whirlaway (1941), Count Fleet (1943), Assault (1946), Citation (1948), Secretariat (1973), Seattle Slew (1977) and Affirmed.

    "I'm thrilled," said 93 year old Penny Chenery, who owned Secretariat and watched from the stands.

    A sign with American Pharoah's name and silks was quickly put up in the coach handbags outlet infield next to the 11 other Triple Crown winners.

    The crowd of 90,000 capped to avoid overcrowding and long lines from last year's total of 102,199 roared as American coach factory online sale Pharoah turned for home in front.

    As he neared the finish line, drinks were tossed in the air and fans jumped up and down in celebration, many holding their camera phones aloft to capture history on a sunny, 75 degree day at Belmont Park. It's unlikely the champion heard them since American Pharoah wears ear plugs to block noise that might get him worked up.

    American Pharoah extended his winning streak to seven races. He matched the accomplishment of his grand sire, Empire Maker, who won the 2003 Belmont, spoiling Funny Cide's Triple Crown bid.

    Since 1978, the rigors of the Triple Crown had done in 13 other horses who won the Derby and the Preakness with 12 losing the third leg and I'll Have Another scratched with a leg injury in 2012. Their failures left the sport and its fans craving a worthy successor to the 11 previous champions.

    American Pharoah his tail shortened after being bitten off on a farm when he was a youngster turned out to be that horse.

    He was 2 year old champion last year, and virtually cinched similar honors for his achievements as a 3 year old this year.

    Unlike Affirmed, who dueled Alydar in all three races, American Pharoah didn't have a specific rival since he was only horse to run in all three Triple Crown races. Going into the Belmont, American Pharoah had beaten all of his seven challengers before.

    Five of his rivals lost to him in the Derby, then Coach factory outlet website skipped the Preakness to await the Belmont, a competitive advantage to horses that didn't endure the three race grind. Tale of Verve finished second in the Preakness to American Pharoah, who had beaten Madefromlucky in the Rebel Stakes in March.

  23. Hey, my dear friends, if you are hunting for a wild look Michael Kors Handbags Outlet at a reasonable price; you really should not miss this Michael Kors Handbags On Sale. It is truly a qualifying item. (tags: Michael Kors Outlet Online,Michael Kors Sale,Michael Kors Outlet)
    It posted by Michael Kors Outlet Store.

  24. the development options and particularly in relations to the traditional brick and motor are so precise I found them from some online assignment help and it's real

  25. Designer Exposure es un buen lugar para comprar su Bolsos Michael Kors original.
    The Woven Tote es también una selección impresionante en el Bolsos Michael Kors Baratos.
    Bolso de alta calidad que debe contemplar absolutamente un Bolsos Michael Kors Outlet.
    Du kommer att upptäcka en handfull detaljer som du kan förvänta dig att komma över på en vanlig Michael Kors Rea.
    Du kan hitta ett antal platser som ger Väska Michael Kors.
    Sortimentet är fantastiskt för alla som letar efter en MK Väska.
    Håll dina ögon öppna för den här säsongens val som kommer att presenteras under bara några månader och det kommer utan tvekan att bli spektakulärt.

  26. También puede visitar una tienda de ladrillo y mortero de Michael Kors o su sitio web y comprar directamente un bolso Michael Kors desde allí. Usar un bolso de Michael Kors les permite a los demás reconocer que el habitante urbano educado toma la moda realmente con seriedad. Los bolsos de hombro son particularmente refinados y elegantes.

    {Bolsas Michael Kors Precios | Bolsos Michael Kors Outlet | Michael Kors Rebajas}

    En vacker konstnärlig skapelse av vävt läder, som ger ett skalskaligt utseende - liknar en snakeskin eller fiskhud, linjer utsidan av påsen. Läderens bältros är små läderringar. Det finns också gyllene accenter på väskan. Slutresultatet är svagt liknar kedjepost.

    {Michael Kors Rea | Michael Kors Väska Rea | Michael Kors Plånbok}

  27. También puede visitar una tienda de ladrillo y mortero de Michael Kors o su sitio web y comprar directamente un bolso Michael Kors desde allí. Usar un bolso de Michael Kors les permite a los demás reconocer que el habitante urbano educado toma la moda realmente con seriedad. Los bolsos de hombro son particularmente refinados y elegantes.

    {Bolsas Michael Kors Precios | Bolsos Michael Kors Outlet | Michael Kors Rebajas}

    En vacker konstnärlig skapelse av vävt läder, som ger ett skalskaligt utseende - liknar en snakeskin eller fiskhud, linjer utsidan av påsen. Läderens bältros är små läderringar. Det finns också gyllene accenter på väskan. Slutresultatet är svagt liknar kedjepost.

    {Michael Kors Rea | Michael Kors Väska Rea | Michael Kors Plånbok}


If you need help with Aegisub or have a bug report please use our forum instead of leaving a comment here. If you have a feature request, please go to our UserVoice page.

You will get better help on our forum than in the blog comments.