返回技术文章

字数统计与摘要截取是怎么算的

  • 工程实践
  • 构建

文章列表上除了标题和日期,还显示字数、更新时间与建议阅读时长。 这几个数字看起来简单,但每个都有容易算错的地方,这篇文章把它们说清楚。

字数为什么不能只按空格切

英文按空格分词是常识,但中文不用空格。如果只用 split(/\s+/) 统计, 一整篇中文文章会被算成 1 个词,阅读时长永远是「不足 1 分钟」。

所以统计分两部分:中日韩字符逐字计数,拉丁文按词计数, 两部分相加。关键在于先把中日韩字符剔掉再数拉丁词, 否则中英混排的段落会被数两遍。

公式为什么不计入字数

公式里全是符号:xxα\alphai=1n\sum_{i=1}^{n} 这些既不是汉字也不是英文单词。 如果把它们算进去,一篇公式密集的文章会被严重高估阅读时长。

所以统计前会先把 $...$$$...$$ 整段去掉。同样的处理也用在摘要截取上 ——摘要里冒出一个孤零零的 $ 或半截公式,读起来很别扭。

阅读时长怎么取整

按每分钟 300 字估算,向上取整。不足一分钟的按一分钟显示, 完全没有正文的显示「不足 1 分钟」。

字数分钟数显示
00不足 1 分钟
1201约 1 分钟
3012约 2 分钟
15005约 5 分钟

摘要的优先级

摘要按三个层次取,先命中先返回:

  1. frontmatter 里显式写的 summary
  2. 正文中 <!-- more --> 标记之前的内容
  3. 第一段真正的正文(跳过纯标题块)

第三条里「跳过纯标题块」这个细节容易忽略。如果文章开头就是二级标题, 直接把标题当摘要会和文章标题重复,读起来像出了故障。