readability を計算する

英文の readability(読みやすさ) の指標として、日本だと SSS さんの YL*1 が多読やってる人たち(タドキストと言うらしい)の間で一般的だが、本場英語圏では Fog とか Flesch-Kincaid とかいうのが主流。
ベタだけど、Wikipediareadability の記事 を一応貼っとく。


で、Amazon.com では、全ての本が対象ではないのだが、それら Readability のうち Fog と Flesch と Flesch-Kincaid を表示してくれる(例えばこんな感じ )。他にも単語数とか、単語あたりの音節数とか(多いと読むのがより難しい)、1ドルあたりの単語数とか(笑)いった情報が見られる。
ちなみに、本の製品情報の Inside This Book にある "Text Stats" をクリックすればこれらの情報が載ったページが表示される。 "Text Stats" が無ければ残念ながらその本ではそれらの情報はない。 "SEARCH INSIDE" が有効であればたいがい "Text Stats" も見れそうな雰囲気なのだが、必ずしもそうじゃないあたり、どういう基準なのかはちょっとよくわからない。


これをみて、自分でも計算できるんじゃないかなあと思った。といっても自力でゼロから実装するんじゃなくて、そういうライブラリがあるんじゃないかってことね。
で、期待せずに Ruby で探してみたのだが見あたらず。
こういう比較的ニッチなライブラリでもあったりするんだよなあ、と思って CPAN 探してみたらやっぱりそのまんまのライブラリがありやがるし。こういうところは Perl に敵わんよなあ。


というわけで、このblogにはなんとも珍しい perl なエントリ。
CPANLingua::EN::Fathom をインストールして、次のようなコードを書けば Readability 関連情報がさっくり表示される。

use Lingua::EN::Fathom;

my $text = new Lingua::EN::Fathom;
$text->analyse_block(join('',<>));
print($text->report);

試しに Anne of Green Gables でやってみると、

Number of characters       : 553023
Number of words            : 101512
Percent of complex words   : 8.43
Average syllables per word : 1.4276
Number of sentences        : 6822
Average words per sentence : 14.8801
Number of text lines       : 9839
Number of blank lines      : 2038
Number of paragraphs       : 1863


READABILITY INDICES

Fog                        : 9.3223
Flesch                     : 70.9547
Flesch-Kincaid             : 7.0592

こんな出力が得られる。うーん簡単すぎて拍子抜け。


余談。
これら指標の中では Flesch-Kincaid が「その本を読むのに必要な学年」という意味なので一番わかりやすいのかな。
4.2 だと(アメリカの)小学校4年生向け、7.1 だと(アメリカの)中学校1年生向け、と考えればいい*2
でも機械的に計算しているだけで、かつ全体の長さという要素は全く値に反映されていないので、そこらへんは念頭に。

*1:最初何の略かと思ったら「よみやすさレベル」の略……ええけどね

*2:なお学制の違いはとりあえず横にうっちゃっているので、そこはわざわざつっこんでいただく必要はない