2013年11月4日月曜日

青空文庫の複数テキストを合本して kindle-paperwhite で読む

AozoraEpub3 という素晴らしいソフトのおかげで、青空文庫の小説を、kindle で自由に読めるようになった。
青空からテキストデータの zip をダウンロードして、それを、 AozoraEpub3で epub3 に変換し、さらに、 kindlegen で mobi に変換。あとは、usb ケーブルで kindle に転送すれだけでいい。
AozoraEpub3の作者の方には本当に感謝致します。

ただ、欲を言を言わせて貰うと、 短編やシリーズ物など、複数の小説データを合本する機能が欲しい。
まあ、TODOには優先度高として挙げられているので、 AozoraEpub3の将来のバージョンで合本の機能が追加されるのを待てばいいわけだが、 何でもかんでも人任せというのも情けない。

というわけで、 青空文庫の複数のテキストファイルを結合するスクリプトを作ってみた。
(本当は、epub レベルで結合するのが理想なんだけど、 epub3の仕様は、僕には難しすぎて無理…)

ソースコード (bindao.py)

python2.7 python3 
os-x 10.6.8 + kindle-pw でしか試していないけど、 たぶん、linux でも動作すると思う。

合本するロジックは、 「青空文庫の作品を合本して Epub 化する試み」 の方法を参考にさせて頂き、プラス、
  • 目次を階層化するために、個別作品の見出しレベルを変更



    Zip 
    zip

     zip 
    zip zip
の3つの機能を施した。

使い方

ターミナルアプリなどから、shell上で、
$ python bindao.py 結合する青空形式のzipファイル....
を実行すると、
Top>
というプロンプトが出る。help と打つと、各コマンドの説明が表示されるが、 その中でも、よく使うコマンドは、
  • title 合本のタイトル
  • author 合本の著者名
  • bindzip
の3つ。
titleauthor bindzip bind.zip 
より詳しくは、$ python bindao.py -h を参照。

実際の例

青空文庫の小栗虫太郎の短編4本を合本してみた時のログ。


(一) zip   
 $ curl -O http://www.aozora.gr.jp/cards/000125/files/4841_ruby_16998.zip
 $ curl -O http://www.aozora.gr.jp/cards/000125/files/666_ruby_2185.zip
 $ curl -O http://www.aozora.gr.jp/cards/000125/files/45230_ruby_26898.zip
 $ curl -O http://www.aozora.gr.jp/cards/000125/files/667_ruby_441.zip


(二) zip bindao.py 
(-noauthor  )
 $ python bindao.py -noauthor 4841_ruby_16998.zip 666_ruby_2185.zip \
                               45230_ruby_26898.zip 667_ruby_441.zip
   Top> title 小栗虫太郎短編集 1
   Top> author 小栗虫太郎
   Top> show all
     合本の表題: 小栗虫太郎短編集1合本の著者: 小栗虫太郎
     合本の副題: -未設定-
     構成ファイル(1): 4841_ruby_16998.zip 内の goko_satsujinjiken.txt
     ................................................................
     ................................................................
   Top> bindzip
     OK: bind.zip を出力しました
   Top> quit
  


(三)bind.zip 
 $ unzip -l bind.zip 
    ------  ----     ----    ----
    258407  10-30-13 15:21   bind.txt
      9286  03-04-12 18:40   fig666_02.png
       674  03-04-12 18:39   fig666_01.png
       296  07-24-07 13:52   fig45230_01.png
       255  07-24-07 13:52   fig45230_02.png
      9834  02-27-06 05:33   fig45230_03.png
     12804  02-24-11 17:54   fig667_01.png
 $


(四)AozoraEpub3 使bind.zip  epub 
$ java -jar AozoraEpub3.jar
  • 端末設定 で kindle-PW を選択
  • 表題: 本文内 「表題→著者名」を選択し、「先頭が発行者」のチェックを外す。
  • 目次設定の「目次(NCX)階層化」のチェックをいれる
  • 他はデフォルトのままで bind.zipをドラッグアンドドロップ
  • 「変換」をクリック
  • kindlegen で mobi に変換
      $ kindlegen '[小栗虫太郎] 小栗虫太郎短編集 1.epub' -o oguri.mobi
    
  • kindle を usb 接続して mobi ファイルをコピーする。
    osx の場合は、/Volumes/Kindle にマウントされるので、
    $ cp oguri.mobi /Volumes/Kindle/documents/
  • 最後に、ファインダーなどで kindle device をアンマウントすることを忘れないように。

    ありゃ、部分的に辞書が引けない場合がある!

    AozoraEpub3 + bindao.py 使 kindle
    調べたい単語をロングタッチして、デジタル大辞泉を引いても、
    「お探しの言葉が見つかりませんでした」
    と出るばかり。でも、同じ言葉を同じ作品の別の段落で引くと、 ちゃんと辞書が引けたりする。
    bindao.py  AozoraEpub3  kindle-pw 

    で、いろいろ調べてみた。
    epubxhtml ()
    でもこれだと、kindleで見た時に、改行が半角空白で表示されてしまう。
    改行の代わりに、‌ という特殊シンボル(自分でも意味がわかっていない)を使っても駄目。
    <span />   mobi 

    xhtml kindle

    で、これも、 python のスクリプトでまとめてみた。
    ソースコードは ここ
    使い方は、AozoraEpub3 で epub を作成し、kindlegen を実行する前に、 shellからこのスクリプトを実行すればいい。
    例えば、AozoraEpub3 が出力するファイル名を source.epub とすると、
     $ python aoepub3_hack.py source.epub dist.epub 
     $ kindlegen dist.epub
    
    これで、空の span タグだらけの、変な dist.mobi が出来上がる。
    (他のオプションなどは、 $ python aoepub3_hack.py -h を参照)

    しばらく使ってみて、今のところ特に問題はない。
     <span /> 
    こんなことやらなくても、何か、css 関連の設定ですっきりと解決、 なんてことになればいいのだけど。

    3 件のコメント:


    1. 使
      (windwos8) aozoraepub3
      使
      返信削除

    2.  kato
       bindao.py 

       windows
       bindao.py 
       https://gist.github.com/te223/7296679

       -ms
      shift jis
       
       $ python bindao.py -ms -noauthor 4841_ruby_16998.zip ...

       使python bindao.py -ms -h 
      返信削除
    3. tezさん、完ぺきでしたよぉ〜
      寺田寅彦随筆集の私家版をこれで作ります。どこまで連結できるかわかりませんが
      ひたすら打ちまくります!

      返信削除