Get Adobe Flash player

プログラミング

mobipocketと英辞郎 for Kindle(3)

気づいてはいたのだが、対応方法がわからなかったので仕方ないと思っていた点がある。

たとえば、makeなんて単語は、実際の文中では makes, made などの形で登場するし、tallなどは taller, tallestという形でも登場する。しかし、単純に「語」の完全一致で辞書検索されると、もちろん、makes も made も make には引っかかってくれない。名詞の複数形も同様である。

kindleに標準でついてくる The New Oxford American Dictionaryでは、このあたりがちゃんと検索されるので、何らかのデータの持ち方で実現できることは、容易に想像ができるが、では、そのデータ形式は?となると、お手上げ状態であった。

が、とは言うものの、mobipocketの書籍、辞書のデータってあれほどフリーでたくさん出回っているのに、その内部フォーマットが秘密なんてことはどうもありそうにないではないか?というのが、最初の疑問。実は、やり始めの頃にも、いい加減なテンションでそういう資料がないか、ちょびっとググってみたのだが、そういうロー・テンションなので、すぐに諦めてしまっていた。

しかし、一応自分でhtmlも生成するとなると、ちょっと調べておこうかと、少しだけエンジンを吹かし気味で調べてみると、こんなページが見つかった。このページの 2.2 Inflections for Dictionaries が語形変化に対応するためのデータ形式のようだ。幸い、英辞郎の辞書データにも、それぞれの品詞に語形変化がある場合は、「【変化】」というヘッダとともに変化形を保持しているので、これを各エントリーで引っ張り出してきて、このような要素を作り出してやればよさそうだ。

ちょっと、心配なのは mobipocketリーダー的にはOKだが、kindleの辞書検索機能がこのデータを仕様して語形変化追従を実現しているかどうか不明な点だが、これ以外に語形変化に関するデータはなさそうなので、とりあえず、この形式のタグを含むHTMLファイルを生成するように変更してみた。

ついでに、このページ近辺の資料をもとにして吐き出すHTMLファイル自体も少し整理した。

で、結論から言うと、首尾は上々。ちゃんと、語形変化に追従して検索するようになった。これで、ずいぶん使い勝手が向上する。

ところで、前のアーティクルにいただいたコメントに対する調査で、知ったのだが、英辞郎辞書って、すでに version 118 とからしい。自分の使っている version 52って、2001年という超古いものらしい。で、最新のバージョンはunicode対応になっていて、おそらくはCSVで吐き出すデータもutf8とか、もしかするとUCS2なんてことになっているかもしれない?(さすがにUCS2ってことはないとは思うのだが)

それで、オプションで第3引数を受け付けるようにscriptを変更した。ここにutf-8とか書くと、CSVファイルをUTF-8のファイルと思ってオープンするはず。残念ながら、手元に英辞郎の118とかがないので、それ以外の問題が起こるのか?などについては試していない。

もう一つ、もともとのデータでキャリッジリターンが入っていたところ(PDICで見ると改行されて見えるところ)は、前のスクリプトでは、そのCRを除去して、後続の内容をそのまま続けていたのだが、これもkindleでのリアルタイム検索の表示用に、CRをスペースに置き換えるように変更した。貴重な2行表示を有効に使うためにワードラップしやすいようにするのが目的。

では、Eijiro.csv2html.plをここに落としておくことにする。拾った方はネコババしても大丈夫だけど、何かあったときに落とし主に文句を言わないように。

mobipocketと英辞郎 for Kindle(2)

で、話の続きなのだが、現在、おそらく多くの人が使っていると思われる「PDICが吐き出したcsvファイルをhtmlにするスクリプト」は、それなりに古いこともあって、吐き出されるhtmlファイルにちょっと問題がある。いちいちあげつらっても仕方ないので割愛するが、とりあえず今回はその修正が目的と言うわけではなくて、kindleで使う場合に(自分が)使い勝手がいいようなmobipocketの辞書になるようなHTMLを吐き出してくれるようにするのが目的。

そんなに大掛かりなスクリプトでもないので、既存スクリプトをいちいち解析して、改造なんて面倒ということでスクラッチビルドってことにした。もちろん、「何を吐き出すべきか」については参考にさせてもらうしか手がないのでその点は大いに感謝というところだ。

新規に作るにあたって、CSVファイルのパーサーを自分で書くなんてことはしたくなかったので、CVS_XSモジュールを使うことにした。あるだろうとは思っていたが、使ったことがなかったので、ググって出てきた先達の方のコードをほぼそのままパクることにする。

ところが、自分の使っている英辞郎は、アルクがCDROM付きの書籍として売っていた「英辞郎」なのだが、CSV化したときに、単語の意味部分が長いと、要素中にキャリッジリターンが含まれる部分が結構あって、これは行区切り、すなわちレコード区切りとみなされたりして、おかしなことになる。(自分のPDICだけなのかどうかは不明)

とりあえず、対処は難しくないので場当たり対応したのだが、これは要するに、フィールド中にnewlineが含まれるパターンで、これについては、お決まりパターンが同モジュールのマニュアルの冒頭に思いっきり載っているのを後で発見してしまった。

最初から、こちらをパクッていればよかったのだが、時すでに遅し。というわけで、いまいちスマートに対応出来ずちょっとダサい感じになってしまっているのが、ちょっと悲しいところ。今更イジリたくないので、とりあえずそのままにしている。

変更点としては、

  1. 前のアーティクルでも書いたように、生成HTMLのタグのBEGIN-END対応がおかしい点が複数存在するので、そのあたりを修正。
  2. これは、まだ影響は不明なのだが<idx:key each-word=”true”>タグの出力をやめたり(そもそも、このタグは対応する</idx:key>もなかったりもしたので)
  3. HTMLエンコードはHTMLモジュールで行うようにする
  4. 出力されるHTMLファイルの文字コードをutf-8とする

などが動作的に改造した点。ちなみに入力されるcsvファイルはshift-jisを前提としているので、PDICが吐き出したものをそのまま食わせるようになっている。(吐き出すHTMLはutf-8)

加えて、自分にとっての懸案である「1行の冒頭になるべくたくさんの『意味』情報を登場させる」を実現するために、

  1. 【@】で始まるカタカナによる「読み方」はばっさり削除
  2. 語形変化であることを示す「【変化】」という見出しも削除
  3. 「【大学入試】」マークも削除
  4. 句読点の「。」「、」を「.」「,」に置き換える
  5. 括弧類をおかしくない程度にasciiのカッコに置換
  6. その他のMBCの記号類もSBCに置換
  7. 「名-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のフォントがなかなか悪くない感じで「これなら、日本語にしてもいいかな?」って思ったのが運のつき。もう、大晦日だっていうのに。

まず、例によって、前回もお世話になった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時頃。

そこで、一旦就寝することにした…つづく。

kindle近況とC#

先週から、おとなしくなっていたが、別に飽きて使っていなかったわけじゃない。せっせと、「Programming C#3.0」を、通勤の行き帰りの電車の中でも、バスの中でも読んでいる、それ以外では読んでいないけど、なんだかんだで日に1時間ほどは読んでいると思う。まぁ、それが長いか?と言われると「あはは」と笑ってごまかすしかないが、それでも割りと着実で何とか20%ほどは読み終えた。

が、正直なところ、まだ初心者向けの内容でちょっとおもしろくない。ま、C#について知らなかったことも、ぽつぽつと出てくるので、たとえば、

  1. internal アクセス修飾
  2. メソッド引数の参照渡しでは、仮引数宣言にも、実際のメソッドコールの方の引数にも ref修飾がいる
  3. 同じくメソッド引数の参照渡しのout修飾(これもコール側にも必要)

なんてのは、知らなかったし、そうそう、あと、あるクラスのstaticメソッドに、同じクラスのインスタンスを引数で渡すと、そのインスタンスのprivateメンバにアクセスできるなんていうのも、実は知らなかった…。

おっと、それはいいとして、そういうわけで、実はkindleの日本語化とか、日本語のhtmlをpdfやmobipocket形式にして読むなんてことを、いろいろ試していたのだが、結局本来の使い方、すなわち AmazonのKindle Storeで購入した本を英文で読むというのが、使っている時間の大部分というか、この1週間ほどは、ほぼ100%となってしまっていて、そういうわけで、ファームもオリジナルに戻してしまった。やはり、オリジナルの英字フォントが読みやすいなってことで。

関係ないけど、木漏れ日がきれいだったので。E-410だったりする。

関係ないけど、木漏れ日がきれいだったので。E-410だったりする。

Programming C# 3.0(kindle edition)を購入

ProgrammingC#3.0の表紙

ProgrammingC#3.0の表紙

昨夜は、今までの職場が最後だったので、送別会を兼ねて自分のいたグループ4人+1で、帰りに飲みに行ったために帰りが遅くなってしまい、さらに頭もくらくら、いやグラグラ?だったので、さっさと寝てしまった。

で、今朝から、またぞろいろいろ触っているのだが、いろいろ迷った結果「Programming C#3.0」を購入してみることにした。priceは$27.19ってことで、大体95円くらいのレートだとして、2,583円くらいってことになる、リアルタイムでは90円/$くらいだから、2,500円ほどにはなるかもしれない。

これの訳本Paperbackを国内で買うと、5,000円ちょっとするみたいだから、ほぼ半額となるのはうれしいところ。

で、問題の中身だが、さすがに小説とかじゃないからなのか、非常に読みやすい。さらに、知らない単語に出会っても、kindleの英英辞書のおかげで、それほど困らない。明確な意味の単語というか、具体的な単語が多いので、英英辞書でも十分に役に立ってくれる。これが小説なんかだと、あいまいな、というか、含蓄ある言葉とかが使ってあって、そんなもん英英辞書で引いても、またまた知らない単語にぶつかるだけで、前も書いたように堂々巡りの末に、無限再帰に陥ってしまうのが落ちだったりする。

ところで、この「Programming C#3.0」は最新の版(5th edition)で、この値段なのだが、これが第4版の「Programming C#」となると、$19.04なのだ、1,800円強というところになるだろうか、これはかなり魅力的だけど、残念ながら、その名のとおり C#2.0までの解説しかなく、今回自分的にはもっとも興味のあるLINQについては触れられていないもの。ってことで、少々高めでも3.0が必要だったのだが。

紛らわしいのは、4th Ed.のAuthorが”Jesse Liberty”となっているのに対して、この5th Ed.では”Donald Xie”となっているのだ。実は、そんなこと気にしないで、kindle上で5th Ed.を購入した直後に、なんか「Buy with 1-click」の設定が気に入らなくて、kindle上の「お買い上げありがとうございます」画面(あ、もちろん日本語では出ませんので、念のため)から、キャンセルのリンクをクリックした。で、kindle自体からは、すぐにコンテンツが削除されたのだが、その直後に、もう一回購入しようとすると「あなたはこのコンテンツをすでに購入済みなので買えないよ」って言われてしまう。

ちょっと心配になってPCからAmazon.comの自分のアカウントページでデジタルコンテンツの購入リストを見ると、しっかり購入したことになっていて、クレジットカードに課金されている。な、な、なにぃ~って感じなので、ちょっと、kindleのreturn&refundとかのページを読んでみると、どうもメールで知らせないといけないみたいだ(phoneでもいいそうだが、もちろん、それは論外)。面倒くさい~って感じだ。買うのはこんなにイージーなのに、や~めたとなると、ちょっと面倒なわけだ、まぁ、しかし、これが日本の普通の本屋だと、一旦ダウンロードしたコンテンツのやっぱりいらないは、そもそも対応してくれない気がするので、それと比較するとまぁ許せるレベルか。

とか、まぁ、そんなこんなで、調べていたりしたときに「Programming C#」に3.0付となしの2つの版があるのを知って、return&refund処理が終わるのを待ちたくないので、4th Ed.を買っちゃおうかと調べてみたりして、さっきの話になったわけ。

でも、結局、return&refund処理が終わる前に、kindle内の5th Ed.のサンプルを消して、新たに5th Ed.のサンプルをダウンロードして、そこから再購入したらあっさり買えてしまった。購入履歴に一時、同じ本を2冊買っちゃって、両方カードにchargeされてることになったので、心配だったが、refundの処理が思ったより早くて、さっき処理完了のメールがもう届いたりしている。

Get Adobe Flash playerPlugin by wpburn.com wordpress themes