よみがな あり|なし
Saturday,August 27
漢字によみがなをうつ【後編】 (02 photos)
1年ほどむかし、ウェブページにある漢字によみがなを表示できる機能をなんとか開発したというおはなしが前編でした。
しかし、漢字によみがなをうつだけでは解決できない問題に頭を悩ませることになりました。
前編で書いたように、よみがなの文字列を成形する機能の要となっているのは「漢字」か「漢字以外の文字」かを識別するところ。
漢字であれば続く半角括弧にくくられた部分をよみがなと解釈して処理するという流れです。
でも、これでは不充分なレアケースが存在するのです。
「1日」という文字に「ついたち」というよみがなをふるケースです。
「1日」は、2文字で「ついたち」と読みますが、1文字目の「1」は漢字ではなく数字です。したがって、プログラムは「1」を「漢字以外の文字」と識別します。つづく「日」は漢字として識別するため、よみがなは「日」にしかうたれないという結果になってしまうのです。
「1日(ついたち)」をプログラム処理すると、漢字である「日」にしかよみがながうたれない…
ウェブページは横書きですから、数字の表記はアラビア数字のほうが適しているケースがほとんどです。
なので、「漢数字で一日と書けばいい」というのは解決にはなりません。
それに「1日」は日付の表記ですから、比較的頻繁に登場します。とても無視はできません。
さらに、1日もだめなら、2日「ふつか」も3日「みっか」も4日「よっか」も5日「いつか」も…だめということになり、頭を抱えることになったのです。
しかたなく、しばらくのあいだは2文字目の「日」に「ついたち」と4文字におよぶよみがなをふって表示させていましたが、苦肉の策なのがあからさまです。
なんとかできないかなー…と考えつつもとりあえずよみがなが表示できるようになった満足感もあり、ながいあいだ問題を先送りにしてきました。
そしてつい先日、その問題に解決を見いだして実装となったのです。
「1日」を「ついたち」と特殊な読みかたをするケース、じつはそんなに多くないんです。
リストアップしてみましょう。
1日=「ついたち」
2日=「ふつか」
3日=「みっか」
4日=「よっか」
5日=「いつか」
6日=「むいか」
7日=「なのか」
8日=「ようか」
9日=「ここのか」
10日=「とおか」
20日=「はつか」
20歳=「はたち」
さしあたってこれら12のパターンしか思いつきませんでした。
これぐらいならプログラムをちょっと改良するだけでなんとかなるんじゃないかと思いました。
「1日」という2文字を基軸に考えると、「11日」や「21日」と見わけがつきません。
しかし「ついたち」というよみがなを基軸に考えれば、それは「1日」しかありえません。
さらに、プログラム処理でよみがなの文字列成形を終えた出力結果は予測できます。
そんな考えに基づいて改良したのは、プログラム処理でよみがなの文字列成形を終えた部分です。
1日(ついたち)という入力にたいして文字列成形を終えた出力結果は予測できるので、それが12のパターンのいずれかであれば、正しい結果に書き換えて出力するという感じに改良したのです。
プログラム処理(文字列成形)による出力結果は画一的。パターンにあてはまればそれを書き換えるという処理を追加しました
これにより、「1日」という2文字にたいして「ついたち」とよみがながうてるようになりました。
スタジオムーンリーフでは、この12のパターンのみに対応した処理部分を「ついたち処理」と呼んでます。
このパターンは増やすこともできるようになっているので、単語登録みたいなこともできます。たとえば、カタカナやアルファベットの文字列によみがなをうたねばならないようなケースにも対応できるようになりました。
こういうところでひっそり自慢話でした(笑)
≫ NEXT_LOG よみがな自動処理への道【1】その名は「めかぶ」(03 photos)
≪ PREV_LOG 漢字によみがなをうつ【前編】(2 photos)
スタジオムーンリーフ(2005年1月開設/Since 2005)
代表者:野口 卓洋(Takuhiro Noguchi)
Add:356-0006 埼玉県ふじみ野市霞ヶ丘3-1-22-504
Twitter:@StudioMoonLeaf
Facebook:facebook.com/noguchi.takuhiro
©2017 STUDIO MOON LEAF ALL RIGHTS RESERVED.