« 「はなまき」を食べました | トップページ | OCR~青空文庫~html 5 »

2014年2月 2日 (日)

OCR~青空文庫~html 4

 青空テキストビューワーの作者さんは|なしでフリガナの始まりの位置を見つけていることがわかったので、腰を据えて考えてみました。見つけてそこに自分が|を挿入すれば、そのあとはhtmlのrubyタグにそれぞれ置き換えて完了です。

A:江戸には四宿《ししゅく》 → B:江戸には|四宿《ししゅく》

 これを実現するには、Aを先頭から一文字ずつチェックしながらBにコピー、《を見つけたら漢字の先頭にもどって|をたす…という手順ではできません。
 《を見つけた時点で、Bが「江戸には四宿」になっちゃってます。プログラムでは、「品川」+「心中」=「品川心中」という足し算はできますが、「品川心中」-「心中」=「品川」という引き算ができないからです。

 開始位置はひらがなから漢字に変わる場所なので、Aをチェックするときに、文字の種類を覚えておいて、前の文字の種類と違う場所になるまで、Bには足さずにCに文字を足すようにします。

 Aを先頭から「に」にすすんだ時点で、Bは「」、Cは「江戸」。「に」で文字が変わったので、B+CでB「江戸」、Cを「」にして文字を足し始める。
 「四」で文字種が変わるので、B「江戸」+C「には」=「江戸には」、Cが「」
 「《」で文字種が変わるので、B+「|」+C+「《」=「江戸には|四宿《」…(以下繰り返し)

 この基本的な手順ができたので、もとから「|」がついているときは、違う処理をします。

 ひらがな・カタカナ・漢字だけじゃなく、記号・英数・ギリシャなどの種類を増やせば位置判定が精密になります。

 文字を判定するのに、「あ to ん」という書き方ができるので、「亜 to 熙」で漢字判定をしたらうまくいきません。ファイルはshift-JISでも、内部ではUnicodeだったのでした。
 「ー」(長音)や「ヽ」はひらがなにもカタカナにもなります。「々」は青空では漢字扱い、そんな処理を加えて、基本部分はできあがります。

 あと1回続きます m(_ _)m

|

« 「はなまき」を食べました | トップページ | OCR~青空文庫~html 5 »

コメント

MS-Wordのマクロですが、漢字の再変換機能を使って振り仮名を振るものを作ったことが有るのを思い出しました。もちろん自動で振り仮名を振れる訳ではなく、順番に候補を出してユーザに選択させます。
Word97の頃だったと思うのですが、webにも再変換のレファレンスになる資料が無く、あれこれ試行錯誤してなんとか動くものを作りましたが結局使い物になりませんでした。

ついこの間はMS-Excelで顧客氏名の振り仮名をふるマクロを作りましたがこれは割りと使えるものに。氏名に限ればそこそこの正しい候補が取得できます。

ごめんなさい、blog記事とあんまり関係ないですね。

投稿: nam | 2014年2月 3日 (月) 20時00分

>あんまり

いえいえ、お気になさらず。プログラムの話題は忘備録であって、読みたがるかたがいないのはわかってますので。

エクセルってフリガナ関数か何かがありましたっけ? マクロはちょっと使ってみましたが、もっとも使いたいパワーポイントのマクロがダメダメだったんで、ちっとも触ってません。アクセスを使っていたころはVB並みに役立ってました。

投稿: snob | 2014年2月 3日 (月) 21時13分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: OCR~青空文庫~html 4:

« 「はなまき」を食べました | トップページ | OCR~青空文庫~html 5 »