Archive for 2009 年 12 月 31 日
mobipocketと英辞郎 for Kindle(2)
で、話の続きなのだが、現在、おそらく多くの人が使っていると思われる「PDICが吐き出したcsvファイルをhtmlにするスクリプト」は、それなりに古いこともあって、吐き出されるhtmlファイルにちょっと問題がある。いちいちあげつらっても仕方ないので割愛するが、とりあえず今回はその修正が目的と言うわけではなくて、kindleで使う場合に(自分が)使い勝手がいいようなmobipocketの辞書になるようなHTMLを吐き出してくれるようにするのが目的。
そんなに大掛かりなスクリプトでもないので、既存スクリプトをいちいち解析して、改造なんて面倒ということでスクラッチビルドってことにした。もちろん、「何を吐き出すべきか」については参考にさせてもらうしか手がないのでその点は大いに感謝というところだ。
新規に作るにあたって、CSVファイルのパーサーを自分で書くなんてことはしたくなかったので、CVS_XSモジュールを使うことにした。あるだろうとは思っていたが、使ったことがなかったので、ググって出てきた先達の方のコードをほぼそのままパクることにする。
ところが、自分の使っている英辞郎は、アルクがCDROM付きの書籍として売っていた「英辞郎」なのだが、CSV化したときに、単語の意味部分が長いと、要素中にキャリッジリターンが含まれる部分が結構あって、これは行区切り、すなわちレコード区切りとみなされたりして、おかしなことになる。(自分のPDICだけなのかどうかは不明)
とりあえず、対処は難しくないので場当たり対応したのだが、これは要するに、フィールド中にnewlineが含まれるパターンで、これについては、お決まりパターンが同モジュールのマニュアルの冒頭に思いっきり載っているのを後で発見してしまった。
最初から、こちらをパクッていればよかったのだが、時すでに遅し。というわけで、いまいちスマートに対応出来ずちょっとダサい感じになってしまっているのが、ちょっと悲しいところ。今更イジリたくないので、とりあえずそのままにしている。
- 実は、すでに要改良と思われる点を発見
どうも、word-wrapはスペース区切りでしか行われないようだ。コンマなど、句読点でもやって欲しいのだが。
変更点としては、
- 前のアーティクルでも書いたように、生成HTMLのタグのBEGIN-END対応がおかしい点が複数存在するので、そのあたりを修正。
- これは、まだ影響は不明なのだが<idx:key each-word=”true”>タグの出力をやめたり(そもそも、このタグは対応する</idx:key>もなかったりもしたので)
- HTMLエンコードはHTMLモジュールで行うようにする
- 出力されるHTMLファイルの文字コードをutf-8とする
などが動作的に改造した点。ちなみに入力されるcsvファイルはshift-jisを前提としているので、PDICが吐き出したものをそのまま食わせるようになっている。(吐き出すHTMLはutf-8)
加えて、自分にとっての懸案である「1行の冒頭になるべくたくさんの『意味』情報を登場させる」を実現するために、
- 【@】で始まるカタカナによる「読み方」はばっさり削除
- 語形変化であることを示す「【変化】」という見出しも削除
- 「【大学入試】」マークも削除
- 句読点の「。」「、」を「.」「,」に置き換える
- 括弧類をおかしくない程度にasciiのカッコに置換
- その他のMBCの記号類もSBCに置換
- 「名-1」のように品詞についた添字のハイフンを削除
などの処理を行った。今のところ、以上がやっていることのすべて、のはず。使っているうちに気づいた段階で、さらに置換ルールを増やす可能性はあると思うが、今の段階でも、パッと見問題なく使える感じにはなったと思う。
で、そうじゃないかという気はしていたのだが、PDICが吐き出した全内容をHTML化したファイルであっても(内容を間引かなくても)、mobipocket Creatorが異常終了しなくなった。多分、HTMLタグの不整合をなくしたからではないかと思われるが、あくまでも推測の域を出ない。
例えば、HTMLタグの不整合によって、HTMLのパーサー部分でメモリ破壊が起こっていたのではないだろうか。そもそも、論理的におかしなHTMLファイルを通してしまう段階でバグではあるが、まぁ、おかしなものを喰わせておいて、お腹をこわす奴が悪いと責めるのもなぁ~って感じではある。
というわけで、PDICが吐き出したCSVファイルから、mobipocket-creatorで辞書化できるHTMLファイルを吐き出すperlスクリプト:Eijiro.csv2html.plを恥ずかしながら公開しておこうと思う。
このスクリプトは、shift-jisを吐き出す英辞郎version52というかなり古いバージョンでしかテストしていない。他のバージョンの英辞郎で動くかどうかはわからない。少なくとも、英辞郎version117 Unicodeバージョンでは、吐き出すcsvがUTF-16LEであり、また語数が非常に多いなどの問題もからんで、動かないことを確認している。(動くバージョンはこちら。新しいリンク先のバージョンでは語形変化の追跡にも対応しているので、できれば、本記事のバージョンは使わないで欲しい。)
サポートは基本的にないけど、気分次第っていうところ。以下がコマンドプロンプトでの使い方、カレントディレクトリは適当。
C:\> perl Eijiro.csv2html.pl eijiro52.csv nejiro > newjiro.html
上のリンクを右クリックとかで「リンク先を保存」とかにして、Eijiro.csv2html.plとかなんとか言う名前で保存。スクリプトはutf-8じゃないといけないので、普通にクリックして、コピペでファイルに落とす場合は、utf-8で保存しなくちゃいけない。
第1引数が、入力となるPDICが吐き出したCSVファイル、第2引数はHTMLファイルに埋め込まれる辞書の名前。結果は、標準出力に吐き出されるので、リダイレクトでファイルに落しているの図が上記。
もちろん、このスクリプトを使って、不都合なことが起こっても、責任は取れないので、念のため。なにしろ、自分の環境でしか試していないので。あと、細かいことは、先達の方々のサイトを参考に、ここでワンストップなサイトになるつもりはないし。
mobipocketと英辞郎 for Kindle(1)
大晦日は朝から雪。一旦、日が射したりもしたが、結局はずっとチラチラと降り続く一日となった。
そこで、久しぶりに、kindleネタ。
kindleを買ってから基本的に、仕事がらみもあって「Programming C# 3.0」だけを読んでいた。この本は割と英語がシンプルで、非常に読みやすかったことと、日本語化した場合の英語のフォントがなんとなく読みづらい気がしたので、結局ファームウェアはオリジナルに戻して使用していた。
そうしているうちに、新しいファームが公開され、何かと便利になったりもしたので、あんまり日本語化ファームに変えようと言う気がしていなかった。が、mixiのkindleコミュで、フォントのトピックが上がっていて、その人のscreenshotのフォントがなかなか悪くない感じで「これなら、日本語にしてもいいかな?」って思ったのが運のつき。もう、大晦日だっていうのに。
- 外が明るいなと思ってカーテンを開けると…
暖かい室内から、横着できるのも300mmズームのおかげ。
- ここ二日間の成果
こんな感じで最初に単語の意味がでてくれなくちゃ。ってことで、どうにか、使える感じになってきた。
まず、例によって、前回もお世話になったyoshiさんのサイトで、新しいファームに対応したUnicode Font Hackをいただいてきた。それの説明を見ると、今回からTrueTypeフォントを自分で調達すれば、自由にフォントを変更できるようだ。ただ、日本語コードだけフォントを変更して、あとはkindleオリジナルで、となると、フォントの合成とかなって、font-forgeが必要で、とかなると、linux環境か、cygwin環境が…とか、なるようで、ちょっと面倒だなぁ~感が…。
ってことで、とりあえず、溺愛の…じゃなくて出来合いのフォントをいくつか試してみて、最終的には、umeplus-gothicに落ち着いた。英字部分のフォントも、それほど細くなくグリフ自体も見やすく、標準フォントとは、まるで違うにも関わらず、これなら英文を読むのもそれほど苦にならないのではないかと思う。
で、そうなると、辞書も英和辞書にしたくなるのが人情。これは、kindleを日本語化した多くの人が望むことなので、ちょっとググると、いろいろ出てくる。基本的には、kindle ONLYと言う話ではなくて、mobipocket形式の辞書のeBookを作成すればいいって話。実は、わざわざ「作成」せずとも、東村ジャパンさんから、mobipocket形式の英辞郎とか、その他の辞書とかも発売されていて、1,890円とリーズナブルな値段で手に入る。自分も面倒だってことで、もう少しでダウンロード購入しちゃいそうになったのだが、kindleで読めるmobipocketはDRMのかかっていないものに限られるため、ここで購入した辞書は、kindleでは使えないんだそうだ。いやぁ~、危ないところだった。
まぁ、なんで「買っちゃうか~」と思ったかというと、ちまたに出まわっている英辞郎辞書データから、作成するmobipocket辞書をkindleで使用した場合、どうにも使いにくいと言うか、使いたくない感じなのだ。
kindleで辞書を使うっていうのは、その辞書を単独で開いて、調べると言うのではなくて、他の本を読んでいるときに、カーソルを分からない単語に移動すると、勝手に、画面最下段に辞書引きの結果が2行ほど表示されるという「しかけ」を使うってこと。
ところが、英辞郎の辞書をそのままmobipocketにすると、単語の意味部分の冒頭が、品詞や発音記号、さらにはカタカナ読みなど、単語そのものの「意味」以外がドドドドーッと2行全部に表示されてしまう、肝心の単語の意味がそのままでは見えないのだ。もちろん、そこからリターンキーボタンをポチって辞書全体表示にすれば見えたりはするのだが…、それでは使い勝手が悪すぎ。
さらには、今普通に出回っている英辞郎の辞書データ Eijiro52かな?の辞書をそのまま、CSV化して、さらにそこから、出回っているperlスクリプトで HTML化したファイルは mobipocket Creatorで変換しようとすると、mobipocket CreatorがC++ Runtimeエラーとやらで異常終了してしまう。
このエラー自体は、もとのHTMLファイルがある程度小さいと回避できるらしく、辞書のエントリーを間引く chu-jiroなるスクリプトもあったりする。これはもともと他のデバイスで読む場合に、英辞郎の用例などの長文データのために読みづらくなるのを緩和するためのものらしいのだが。
で、そのchu-jiro仕様の小さくしたhtmlファイルを、kindleで読みやすくなるように、エディタの置換機能などを使って、編集したりしていたのだが、その過程で csv2html4mbp2x.plが吐き出したHTMLファイルに、論理的におかしい(タグの対応など)点や、今ひとつ理解しがたい部分もあり…、こりゃ、変換自体を自分でやった方がよさそうだ、と思ったのが昨夜の午前3時頃。
そこで、一旦就寝することにした…つづく。
Plugin by wpburn.com wordpress themes

