「この記事は約○分で読めます」を算出する
よく巷のブログで、
- この記事は約 5 分で読めます
みたいな、読了予測時間が書いてあることがある。
WordPress のプラグインとかでそういうモノがあるんだろうけど、どうやってるんだろうなーと思って色々調べてみた。
目次
ただ文字数から割り算してるだけ
漢字やひらがなを判別したり、言葉の意味とか難解さを見てたりするんだろうか、とか色々想像してたのだけど、いざググってみたらみんな単純で、
- 【記事本文の文字列】 ÷ 600 = 読了予想時間
などと計算しているモノがほとんどだった。
600
文字というのは、日本人が1分間に読める平均的な文字数らしく、自分も以下のサイトでテストしてみたが、大体600〜900文字くらいの、標準的な読書スピードだった。
それじゃあ作ってみよう
どのサイトもそんな簡単な計算式なのかと拍子抜けしたが、簡単だと分かれば実際に作ってみよう。
例えばはてなブログなら、ブログ内で jQuery が使えるので、次のような JavaScript コードで算出できる。
// 記事本文から改行とスペースを除去する
const text = $('.entry-content').text().replace(/(\r|\n|\s)/g, '');
// 1分間に600文字読める想定とする
const readingSpeed = 600;
// 切り上げで予想読了時間 (分単位) を算出する
const forecast = Math.ceil(text.length / readingSpeed);
ある記事で試したところ、text.length
が 7092 文字。予想読了時間は12分と出た。
実感と違う…
自分が書いた記事なので他人が読むスピードはまた違うとは思うのだが、それにしても実態との乖離が激しいなと感じた。読書や人間の目の構造については素人ながら、以下のような原因が考えられると思った。
- Amazon 商品リンクや参考文献のリストなど、「本文ではないので読み飛ばしがち」な文章も一律で計算している
- 商品リンクはほぼ「読んで」はいないだろうし、他サイトへのリンクの文字列なんかはザッと眺めていると思う
- 実装上なんとかするとしたら、タグや CSS クラスで記事内の要素を種類分けし、それぞれに
600
をかけるのか、800
など読み飛ばす想定の数字をかけるのか、という感じで計算の仕方を分ける
- コードリーディングも一般的な日本語とは違う読み方になる
- このブログは技術系のブログなので、サンプルコードを多く掲載している
- 単純なサンプルコードなら、雰囲気だけ分かれば良いので深くは読み込まない
- 一方で、細かな仕組みをコードで解説している場合は、注意深くコードが読まれることもある
- こうしたコードリーディングの速度感は日本語の読書スピードと同じようには計算できない
- 「画像を認識する時間」が全く考慮されていない
- 上のコードは当然ながら画像の有無について全く考慮されていない
- 画像を多く使っている記事なら、画像の内容を理解して次に進むまでの時間も計算に入れてやらないと、実態と乖離する
うーむ。どうもコレじゃあ実用性・有用性は低いかなぁ…。やはり文章の意味や構造、立て付けを理解させた上で細かく計算しないと、実態と合わなくて、読者がモヤモヤしそうだ…。