字数统计与摘要截取是怎么算的
文章列表上除了标题和日期,还显示字数、更新时间与建议阅读时长。 这几个数字看起来简单,但每个都有容易算错的地方,这篇文章把它们说清楚。
字数为什么不能只按空格切
英文按空格分词是常识,但中文不用空格。如果只用 split(/\s+/) 统计,
一整篇中文文章会被算成 1 个词,阅读时长永远是「不足 1 分钟」。
所以统计分两部分:中日韩字符逐字计数,拉丁文按词计数, 两部分相加。关键在于先把中日韩字符剔掉再数拉丁词, 否则中英混排的段落会被数两遍。
公式为什么不计入字数
公式里全是符号:、、 这些既不是汉字也不是英文单词。 如果把它们算进去,一篇公式密集的文章会被严重高估阅读时长。
所以统计前会先把 $...$ 与 $$...$$ 整段去掉。同样的处理也用在摘要截取上
——摘要里冒出一个孤零零的 $ 或半截公式,读起来很别扭。
阅读时长怎么取整
按每分钟 300 字估算,向上取整。不足一分钟的按一分钟显示, 完全没有正文的显示「不足 1 分钟」。
| 字数 | 分钟数 | 显示 |
|---|---|---|
| 0 | 0 | 不足 1 分钟 |
| 120 | 1 | 约 1 分钟 |
| 301 | 2 | 约 2 分钟 |
| 1500 | 5 | 约 5 分钟 |
摘要的优先级
摘要按三个层次取,先命中先返回:
- frontmatter 里显式写的
summary - 正文中
<!-- more -->标记之前的内容 - 第一段真正的正文(跳过纯标题块)
第三条里「跳过纯标题块」这个细节容易忽略。如果文章开头就是二级标题, 直接把标题当摘要会和文章标题重复,读起来像出了故障。