I built a context-aware furigana converter for Japanese text, files, and web pages.
The main problem I wanted to solve was that simple dictionary-based furigana works well for common cases, but breaks on words where the reading depends on context:
* 市場: いちば or しじょう
* 大分: おおいた or だいぶ
* 人気: にんき or ひとけ
* 最中: さいちゅう or さなか or もなか
* 方: かた or ほう
The engine is a hybrid system:
* Sudachi for tokenization, base forms, POS, and candidate readings
* Expanded dictionary coverage for compounds and fixed expressions
* Custom rules for counters, suffixes, rendaku patterns, and phrase overrides
* ModernBERT fallback for 144 especially context-dependent target words
I have been testing it against an LLM-assisted benchmark of 7,500 Japanese lines. On the current benchmark, it gets about 12 wrong readings per 1,000 tokens. I treat that as a practical regression benchmark rather than a formal academic evaluation, but it has been useful for comparing versions and catching regressions.
The hardest remaining cases are personal names, place names, rendaku, rare vocabulary, and domain-specific terms.
I would especially appreciate examples where it gets the reading wrong, since those are the most useful for improving the system.
It really works. Very cool. I’ve been looking for this kind of service for a long time since I started learning Japanese, and I’ve rarely been satisfied with the available services.
20 years now but rikaikun / chan were great at the time and I suspect still are for learning. Hover over the words you can't read, no corner cases really since it shows all the possible readings and meanings, not just one. I would say that extra context is useful for learning the word completely, not just being able to read some content (can just fully translate an article for that).
The best part is the feeling of hovering less over time until finally removing the extension.
Fantastic tool and love the delivery; no sign up required. Interested to hear how you pulled that off.
Also interested to hear if you plan to eventually support an option to add pitch accent; I've never seen what training material exists for that or how that is supported in unicode.
I’m Japanese. I was surprised that it was able to answer correctly even when I entered commonly seen difficult-to-read place names. However, there seem to be cases where it may incorrectly read “今日” when it should be read as “こんにち.”
Example: 今日の日本社会では、少子高齢化が大きな課題となっている。
Also, it’s disappointing that Japanese does not appear even when I select it.
Please let me know if there’s anything I can do to help.
7 comments
[ 3.5 ms ] story [ 21.8 ms ] threadThe main problem I wanted to solve was that simple dictionary-based furigana works well for common cases, but breaks on words where the reading depends on context:
* 市場: いちば or しじょう
* 大分: おおいた or だいぶ
* 人気: にんき or ひとけ
* 最中: さいちゅう or さなか or もなか
* 方: かた or ほう
The engine is a hybrid system:
* Sudachi for tokenization, base forms, POS, and candidate readings
* Expanded dictionary coverage for compounds and fixed expressions
* Custom rules for counters, suffixes, rendaku patterns, and phrase overrides
* ModernBERT fallback for 144 especially context-dependent target words
I have been testing it against an LLM-assisted benchmark of 7,500 Japanese lines. On the current benchmark, it gets about 12 wrong readings per 1,000 tokens. I treat that as a practical regression benchmark rather than a formal academic evaluation, but it has been useful for comparing versions and catching regressions.
The hardest remaining cases are personal names, place names, rendaku, rare vocabulary, and domain-specific terms.
I would especially appreciate examples where it gets the reading wrong, since those are the most useful for improving the system.
The best part is the feeling of hovering less over time until finally removing the extension.
Also interested to hear if you plan to eventually support an option to add pitch accent; I've never seen what training material exists for that or how that is supported in unicode.
Also, it’s disappointing that Japanese does not appear even when I select it.
Please let me know if there’s anything I can do to help.
Regardless, I'm impressed with the tool!