成長するにつれて、より複雑なテキストを理解できるようになります。 しかし、あるテキストの複雑さはどのように評価されるのでしょうか? そして、それを行うプログラムはどう書けばよいのでしょうか? この演習では、テキストがどれほど読みにくいか、そしてどの年齢に適しているかを判定するプログラムを書きます。
テキストの複雑さを計算するには、自動可読性指標(ARI)の式を使います。 ARIは、あるテキストを読むのに必要な米国の学年レベルを評価するために1967年に開発されました。 これは、単語と文の複雑さを測ることで行います。 複雑さは、単語あたりの文字数と文あたりの単語数で測ります。 値が大きいほど複雑です。
プログラムは、テキストの最初の3文を表示しますが、各文は最大50文字までにします。
文が50文字を超える場合は、最初の50文字だけを表示し、その後に省略記号(...)を付けます。
テキストに4文以上ある場合は、4行目として省略記号だけを出力します。
次の内容の「ari.txt」というファイルがあるとします(このテキストは以下のすべての例で使います):
ARI was designed for military use in 1967. It was for real-time monitoring of readability on typewriters. It offered an automated counting method. It has similar results to other frameworks. This validates its accuracy.
このとき、プログラムは次のように出力します。
The text is:
ARI was designed for military use in 1967.
It was for real-time monitoring of readability on ...
It offered an automated counting method.
...
プログラムは、テキスト内の文字数、単語数、文数を計算して出力します。 文は、ピリオド、感嘆符、疑問符で終わることがあります。 単語は、文中では空白文字で区切られます。 単語あたりの文字数を数えるときは、句読点を含め、空白以外の文字をすべて数えます。 統計は、テキストのプレビューの後に空行で区切って出力します。
テキスト統計の部分だけの出力例は次のとおりです。
Words: 34
Sentences: 5
Characters: 186
テキストに関するこれらの詳細がわかれば、次の式を使ってその複雑さのレベルを計算できます。
score = 4.71 * chars / words + 0.5 * words / sentences - 21.43
プログラムは、スコアと、そのテキストを理解するのに必要な年齢の目安を計算して出力します。
| スコア | 年齢 | 学年レベル |
|---|---|---|
| 1 | 5-6 | 幼稚園 |
| 2 | 6-7 | 小学1年生 |
| 3 | 7-8 | 小学2年生 |
| 4 | 8-9 | 小学3年生 |
| 5 | 9-10 | 小学4年生 |
| 6 | 10-11 | 小学5年生 |
| 7 | 11-12 | 小学6年生 |
| 8 | 12-13 | 中学1年生 |
| 9 | 13-14 | 中学2年生 |
| 10 | 14-15 | 中学3年生 |
| 11 | 15-16 | 高校1年生 |
| 12 | 16-17 | 高校2年生 |
| 13 | 17-18 | 高校3年生 |
| 14 | 18-22 | 大学生 |
スコアは小数点以下2桁で出力します。 年齢や学年レベルを求める際は、スコアを最も近い整数に丸め、14を上限とします。 以下はプログラムの出力例です。
The text is:
ARI was designed for military use in 1967.
It was for real-time monitoring of readability on ...
It offered an automated counting method.
...
Words: 34
Sentences: 5
Characters: 186
Score: 7.74
This text should be understood by 12-13 year-olds.