Furifont, a Japanese font that shows furigana
furifont.antfu.meComments
For context, it's a hard enough problem that Google Translate's own romanised pronunciation guides are frequently wrong, or disagree with their text-to-speech.
Well, it wouldn't be the first time ;)
https://en.wiktionary.org/wiki/%E7%94%9F
And while you can usually figure out which reading applies based on what follows, there are still many cases where you can't. A standalone 今日 can be any of "konnichi", "kyou" or "konjitsu" depending on context and intent.
Someone further downthread said it appears to have about 80% accuracy on a short sentence, which means if you're not already at a level of skill where you can verify, then it's going to teach you the wrong pronunciations constantly. When studying languages myself, I find that learning the wrong pronunciation for something is annoyingly sticky, and unlearning takes more effort than learning something correctly the first time.
I’d say you can do a pretty good job with conditional random fields.
Still, very cool demo!
Correct .. 80 chars
Missing .. 12 chars
Wrong .... 8 chars
So I guess the accuracy is roughly 80%. Maybe useful, but not super reliable.Seems a bit drastic. Don't use it as the main font in a japanese textbook, sure, but use it with the disclaimer that it's not perfect and will get some readings wrong? Why not, still pretty useful. Should people also not use Google Translate? (also, you can stuff an entire llm in a font, it's been done).
If I asked you 'are you a sewer (pronounced "soo-er")?', would that make sense? Maybe if you looked at it hard enough and thought about it, but in the meantime, I would probably get some very strange looks for asking.
Yomitan only shows readings for words you explicitly hover over and press a modifier key, so it doesn't distract you, and when you do explicitly ask for a word, Yomitan will show all the readings and definitions.
I'd agree that 80% is better than nothing if you have no alternatives, but you do. I don't know about Furiganator, but Google Translate is also much better than 80%.
Stumbling on names is fine, name litteraly have no logic, there is no system that will get them 100% correct by definition.
Screwing meaning is on a whole different level and Google Translate or even the built in screen reader of your OS will do an extremely good job given enough context (a whole phrase).
In real world use there is little space for sloppy hacks IMHO.
Google translate does not - I see it get readings wrong on very basic sentences with plenty of context on a daily basis. It doesn't make it useless. The website mentioned the font wouldn't show furigana if the reading was ambiguous so I was basing my judgement on that, obviously if it's just always wrong, that's not useful.
One small thing on the Japanese version of the page: in the "Ligatures do the work" section, 合字 itself only gets じ over 字, and 合 has no reading. It should be ごうじ. I guess 合字 isn't in the dictionary, so it falls back to single kanji, and 合 is skipped because it has several readings.
(or maybe it could be theoretically done, just the mechanism to automatically classify wildly different pronunciations mapped to the same literal expressions don't yet exist)
I think the latter is a possibility too; the Japanese language share little from syntax to vocabulary to memes with other languages, including Chinese(Japanese is NOT a dialect of Chinese; arguably it was SUPPOSED TO in the ancient times, but Japan was simply unable to achieve that status), despite sharing Unicode codepoint ranges with the Chinese language due to Han Unification. So there might be some chance that Japanese part of the dataset is inconsistent and contradictory to other parts, in some ways such that, it would make sense to include just the bare minimum to achieve best use of resources available at this point. Chinese models seem to do this, and dataset fractions of Japanese content is always tiny. Some of Chinese image models even straight up un-support Japanese.
As to what teshigahara said in the sibling comment - I think that shows the readings are arbitrary rather than being simply complicated and hard to infer for beginners. It must be that the Japanese written-spoken convergence movement began in the early modern times never reached its goals, beyond the written language having its own tone like in many languages, and so the verbal Japanese expressed in Japanese writings is simply not complete.
https://dic.pixiv.net/a/%E3%81%93%E3%81%AE%E5%85%88%E7%94%9F...
Should probably use MeCab, which parses this correctly.
But you could set this as the default system font for Japanese and enjoy furigana everywhere, even in places that don't support ruby tags at all.
That way choosing a powerful and more accurate engine, or more adapted display of the characters also becomes an option.
From practicality standpoint, this would not work on unprepared texts, as pronunciation of Japanese words are a bit arbitrary and so correct pronunciations would need to be manually selected for each words.
i.e. "maize" could be read "corn". I believe LLMs don't necessarily have good intuition for that, being trained on plain texts.
As to how could such a situation could ever manifest: I would blame the fact that the official language of historical Japanese governments having been a really creative interpretation of medieval Chinese[1] sprinkled with labels and jumps and supplements[2][3], resulting in people just accepting wild divergence between literal and spoken Japanese. I'm not a linguist or a language major so I'd happy if anyone could further elaborate...
1: https://en.wikipedia.org/wiki/Kanbun
2: https://youtu.be/_k0I6bi2pYs?t=248
3: https://d1ysbfo9sxjda0.cloudfront.net/wp-content/uploads/201...
[0] https://litherum.blogspot.com/2019/03/addition-font.html
[1] https://en.wikipedia.org/wiki/Turing_completeness#Unintentio...
In the present context, an example is that the common reading of a Kanji word isn’t always well-defined, and neither is the decomposition of a sequence of Kanji characters into words.
for each character in text
characterToPrint = Parse(character)
if character is LigatureStartCandidate
characterToPrint = LookAheadForNextLigatureCandidateAndResolve(character)
Print(characterToPrint)The real challenge is Arabic, though, see https://fontspec.org/opentype-shaping/opentype-shaping-arabi...
> In typography, ligatures should be used in "truffle" but should not be used in "cufflink."
> This specific pair of words is a classic textbook example used by typographers and software developers to demonstrate the limitations of basic, automated font-rendering rules.
What a world to live in.
On the same point of yours, bad two-letter ligatures also exist: surfing (fi), selfless (fl), halftime (ft), etc. "Swordfish" is fine but "dwarfish" is not.
https://www.japantimes.co.jp/life/2025/06/06/language/furiga...
never even gets to 10!
Maybe it is:
With the ligatures to adApt to pronunciation of words.
https://pingtype.github.io/japanese.html
It also supports line breaking, so that words don't get cut in half when wrapping text.
confusing when you don't explain which limktations this is
frequency wise it should be dai-ninki for sure
Assuming you could hint the furigana from the application, the phonetic transcript would make it more accurate.
A few people here rightly pointing out inaccuracies and other methods of display (ie Ruby tags) but IMO they are somewhat missing the usefulness here - there are many applications (ie e-readers, random web contexts, custom apps etc) where the traditional methods of display are hard or fail. I recently ran into it trying to get custom Japanese ebooks to display furigana with ruby tags on my kindle. It’s a giant nightmare. Excited to try this out.