我发现 Zola 给中文文章的阅读时间预估特别高,比如我刚发布的这篇给 Zola 博客增加搜索功能, 显示要 20 分钟才能阅读完:
发布于: 2022-07-12 · 最后更新时间: 2022-07-12 · 阅读时间: 20 min
我就纳闷我这是写了一篇 essay 吗,于是就是查它的实现, 发现实现很简单,就是基于 unicode 字符除以了一个数:
/// Get word count and estimated reading time
pub fn get_reading_analytics(content: &str) -> (usize, usize) {
let word_count: usize = content.unicode_words().count();
(word_count, ((word_count + 199) / 200))
}
然后他在注释里链接了这个数字的来源,证明它不是拍脑袋决定的, 来源是 Medium 的文档:
Read time is based on the average reading speed of an adult (roughly 265 WPM). We take the total word count of a post and translate it into minutes, with an adjustment made for images. For posts in Chinese, Japanese and Korean, it’s a function of number of characters (500 characters/min) with an adjustment made for images.
这篇文档说英文这类字符大约是 265 个单词每分钟,中日韩这类文字是 500 个字符每分钟,所以对于中文来讲,zola 这个计算是有大约 1 倍的误差的,所以我加了一个判断:
{% macro get_reading_time(minutes) %} {% if lang=="zh" %} {{ minutes/1.88 |
round }} {% else %} {{ minutes }} {% endif %} {% endmacro get_reading_time %}
然后在page.html
里可以这样调用:
{{ macro::get_reading_time(minutes=page.reading_time) }}
这样应该就能修正中文的预估时间了。修正后,开头提到的文章现在预估时间大约是 11 分钟,比较合理了。