こちらは「青空文庫 Advent Calendar 2017」の第1日目の記事で、青空文庫の「Advent Calendar」の記事としても初めての記事です。Qiita に書ける記事ならどんな内容でも歓迎で、参加者を募集しております。
青空文庫とは
1997年7月7日に生まれたインターネット上の図書館です。代表者はいません。主な蔵書は著作権の保護期間を過ぎた作品です。
これ以上の情報は以下をご覧ください。
プログラマ向けの用途としては自然言語処理のためのコーパス(言語資源)として使うことが多いです。
データで見る青空文庫
http://www.aozora.gr.jp/index_pages/person_all.html で公開されているデータを利用しています。
- 手元の2年ほど古いデータを使用しているため、最新版では少し異なるかもしれません。
- 底本情報を削除していない状態でデータを使っています。
収録作品数
2017/12/2 時点
14477作品(著作権なし:14192、著作権あり:285)
手元のやや古いデータ
13087作品(著作権なし:12838、著作権あり:249)
ジャンル(日本十進分類法)別作品数
グラフを描こうかと思ったのですが、NDCの分類記号と分類名のテーブルを作る時間がありませんでした。以下のリンク先がよくまとまっているのでご覧ください。
字数
箱ひげ図の描画ができるWebサービスを利用して、NDCが「913」(文学 日本文学 小説、物語)の作品とその児童向け作品(NDC:K913)で比較してみました。結果、以下のことが分かりました。
- 大半の作品(作品数の75%)より極端に長い作品が存在する。
- 当然ながら児童向けの作品のほうが短い傾向にある。
最短の作品:夢野久作『医者と病人』
最長の作品:宮本百合子『道標』
常用漢字率
NDC | 常用漢字 | 常用外漢字 | 常用漢字率 |
---|---|---|---|
913 | 23152471字 | 11405210字 | 67.00% |
K913 | 1567554字 | 1203481字 | 56.57% |
予想に反して児童向け作品のほうが常用漢字率が低いという結果になりました!?
集計スクリプト:
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use open qw/:utf8 :std/;
use DBI;
use feature qw/say/;
use Lingua::JA::KanjiTable;
my $db = DBI->connect('dbi:SQLite:dbname=bunko.sqlite3', '', '', {
RaiseError => 1,
sqlite_unicode => 1,
});
my $sth = $db->prepare(q|SELECT text_raw_utf8 FROM work JOIN NDC ON work.id = NDC.work_id WHERE ndc = 'K913'|);
$sth->execute;
my $joyo_count = 0;
my $joyogai_count = 0;
while (my $row = $sth->fetchrow_hashref) {
for my $chr (split(//, $row->{text_raw_utf8})) {
if ($chr =~ /\p{Han}/) {
if ($chr =~ /\p{InJoyoKanji}/) {
$joyo_count++;
}
else {
$joyogai_count++;
}
}
}
}
say "常用漢字:${joyo_count}字";
say "常用外漢字:${joyogai_count}字";
say '常用漢字率:' . sprintf('%.2f', $joyo_count / ($joyo_count + $joyogai_count) * 100) . '%';
書いて思ったこと
- NDCの分類番号と分類名の変換ライブラリが欲しい。
- Qiitaの記事である以上、プログラミングよりの技術記事でならねばならないのが枷になりそう。
12月2日は @takahashim さんの「aozora2htmlのご紹介」です!