わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

青空文庫収録作品のイントロ収集

青空文庫収録作品をスクレイピングして,本文はじめの100文字を抽出する,Rubyスクリプト(aozora-picker.rb)を作成しました.ソースはgistよりご覧ください.
ruby aozora-picker.rbを実行すると,青空文庫サイトへのアクセスをいくつか行ったのち,aozora.txtが作られます.中身は次のとおりです.

$ cat aozora.txt
http://www.aozora.gr.jp/cards/000311/files/2732_7355.html : ワーニカとターニャ 宮本百合子 黄色いモスクワ大学の建物が、雪の中に美しく見える。凍った鉄柵に古本屋 が本を並べてる。 狭い歩道をいっぱい通行人だ。電車が通る。自動車が通る。 モスクワ大学のいくつもある ...
http://www.aozora.gr.jp/cards/001155/files/51862_41345.html : ワーニャ伯父さん ДЯДЯ ВАНЯ ――田園生活の情景 四幕―― アントン・チェーホフ Anton Chekhov 神西清訳 人物 セレブリャコーフ(アレクサンドル・ヴラジーミロヴィチ) 退職の大学 ...
http://www.aozora.gr.jp/cards/001341/files/49675_38501.html : 猥褻独問答 永井荷 風 ○猥※なる文学絵画の世を害する事元より論なし。書生猥※なる小説を手にすれば学 問をそつちのけにして下女の尻を追ふべく、親爺猥※なる画を見れば忽ち養女に手を出すべし。懼(おそ)れざる ...

スクリプト中の「@article_count_limit = 3」の右辺を,もっと大きな値にすれば,http://www.aozora.gr.jp/index_pages/sakuhin_wa1.html でリンクされている作品すべてを収集します.
ローカルからの抽出も,可能にしました.青空文庫FAQによると,https://github.com/aozorabunko/aozorabunkoより一括ダウンロードできるとあります.そこで,git clone 上記URLにより取得した後,ruby aozora-picker.rb (パスは省略)/index_pages/sakuhin_wa?.htmlを実行すると,作品名の読みが「ワ」から始まる作品について,外部アクセスすることなくイントロ取得を行います.*1
これを作ろうと思い立ったのは,今週水曜日のことです.その次の日は,3年生向け演習科目の4回目で,何人かが2番目の大きな課題を終えている*2ので,3番目の大きな課題をリリースすることにしました.
課題の詳細は書けませんが,検索対象テキストとして,昨年度は当ブログの2006年の記事だったところ,今回,別の公開されているリソースを使えないかなと思ったときに,青空文庫がひらめいたのでした.
サイト内のいろいろな情報に目を通して,http://www.aozora.gr.jp/index_pages/sakuhin_wa1.htmlが起点に良さそうと判断し,そこから行けるページとリンク,そして以前に活用していたRubyのNokogiriライブラリを組み合わせ,1時間足らずのコーディングで,ほしいテキストファイル(aozora.txt)を得ることができました.
Webアクセスでも,クローンしたものでも,コマンドライン引数を変えるだけで同じように抽出できるのは,コンテンツが同一内容(青空文庫FAQには「あるがままの状態」とあります)であるのと,RubyURI.joinメソッドにより,現在のURI相対パスから,次にアクセスすべきURIを(httpでもfileでも)得ることができるからです.

*1:ただし,gitでクローンすると8.7GBになり,9時間を要しました.またaozora-picker.rbの処理対象がsakuhin_wa?.htmlであれば,問題ありませんでしたが,sakuhin*.htmlにするとエラーが発生しました.無事終了し,生成されるaozora.txtについて,各作品のURIは,「file:」から始まる,ローカルのものになります.

*2:なお,標準的な進度は,4回目の授業で2番目の大きな課題を終えるというもので,授業中にもアナウンスしていました.