文章可读性检测

把一篇文章拆成句子与词语,算出平均句长、平均词长,再按 Flesch 阅读易读度的中文适配口径给出可读性分与难度档位。示例文章 344 个汉字、14 句,平均句长 24.57 字、平均词长 1.59 字,得分 47.78 分落在「难」档——因为这个分数只描述阅读难度,不等于搜索引擎排名。

示例共 14 句、344 个汉字、384 个码点。按 Ctrl + Enter(macOS 用 Cmd + Enter)触发检测,Enter 留给换行。
默认 30 字:超过它的句子记作长句,页面会把它单独标出来。中文手机阅读的经验阈值在 30~40 字之间。
可读性分47.78
难度档位难
句数14
平均句长24.57 字
平均词长1.59 字
长句占比35.71%
汉字数344
预计阅读1.15 分钟
≤ 20 字
5 句
21 ~ 30 字
4 句
31 ~ 40 字
3 句
> 40 字
2 句

上面八张卡与四条分布条是默认示例的服务端直出值,点任意按钮后会随当前文本重算。

序号句长(汉字)词数平均词长标注句首
133191.74长句搜索引擎更看重内容能否解决用户的真实问题,而…
224181.33—很多人在写文章时先定关键词,再把它硬塞进每个…
31161.83短句这种做法在早期也许有效…
432201.60长句但随着模型理解了页面主题与段落意图,单纯的词…
51262.00短句真正影响留存的是句子长度…
643301.43超长句中文读者在手机屏幕上读到第四十个字就会开始跳…
7632.00短句用词也是一样…
825161.56—一个生僻词换成常见词,语义几乎不变,识字成本…
944281.57超长句判断生僻与否可以对照通用规范汉字表的一级字表…
1022141.57—可读性检测给出的分数只描述文本本身的阅读难度…
1124141.71—它不判断内容是否权威,也不判断页面是否满足搜…
1233221.50长句一个句子读起来别扭,读者会立刻关掉页面,这比…
1317101.70—所以可读性不是文风问题,而是留存问题…
1418111.64—把它当成体检指标,比当成排名开关更准确…

逐句明细 12 / 14 行

使用方法

  1. 页面打开时文本框里已经放好一篇 14 句、344 个汉字的示例文章,八张结果卡直接给出可读性分 47.78、「难」档、平均句长 24.57 字、平均词长 1.59 字。
  2. 「长句阈值」默认 30 个汉字。它只影响「长句占比」这一项和逐句明细里的标注,不影响可读性分——可读性分用的是全部句子的平均句长,不看你把阈值定在哪。
  3. 点「开始检测」,或在文本框里按 Ctrl + Enter(Enter 本身留给换行,粘贴整篇文章时不要覆盖它)。文本太短会直接报错,见下文的下限说明。
  4. 看结果:八张卡给总分与四项结构指标,四条分布条给句长区间,下方逐句明细默认显示 12 行、按「加载更多」展开全部,超过阈值的句子右侧会打上红色标签。
  5. 「导出 CSV」把逐句明细存成带 BOM 的表格文件,Excel 打开中文不乱码;「复制报告」把总分与指标抄成一段纯文本。

这个文章可读性检测能解决什么问题

一是把「读起来累」变成可比较的数字。感觉是主观的,平均句长和平均词长是客观的:同一篇文章删掉两个长句,平均句长假若从 24.57 字降到 21.8 字,可读性分会立刻回升十几分。有数字才能判断一次修改到底有没有效果。

二是定位到具体是哪几句太长。总分只能告诉你「有点难」,逐句明细才能指出是哪几行。示例里第 6 句 43 个汉字、第 9 句 44 个汉字,两句就把平均值拉高了将近 3 分,拆开它们比通篇改写划算得多。

三是在同一口径下横向比较。写公众号、官网正文、产品说明时,把两段草稿都贴进来,用同一套分句与分词规则各算一遍,就能排出优先级。文章可读性检测不告诉你「应该写成几分」,只保证两次测量用的是同一把尺子。

四是给出可执行的修改方向。句长偏长就拆句,词长偏长就把生僻词换成常见词,这两件事不需要重写内容,改完再测一次就能看到分数变化。至于「分数高是不是排名就好」,答案是否定的,见下文。

本页不做这些事:不统计关键词出现次数,那是关键词密度检测的范围;不按英文音节的 Flesch-Kincaid 学年级口径算,那条路线请用FleschKincaid计算器;也不做纯粹的字符与词数清点,见字符数统计工具。

原理与规则说明

文章可读性检测给出的分数来自 Flesch Reading Ease(Rudolf Flesch,1948)。英文原式是:

FRE = 206.835 − 1.015 × (词数 ÷ 句数) − 84.6 × (音节数 ÷ 词数)

两个系数不是随手定的:句长项系数 1.015 与音节项系数 84.6 是 Flesch 在 1940 年代用美国成人阅读难度样本做回归得到的,常数 206.835 让「极短句 + 单音节词」正好落在 100 附近。原式里 词数÷句数就是平均句长(ASL),音节数÷词数就是平均词长(ASW)。

中文没有音节,直接套原式会给出假分数。中文书写没有空格,也不存在「一个词几个音节」这个量。如果硬把「音节数/词数」填成 1,示例文章会拿到 97.30 分「极易读」;而换成本页的中文适配口径只有 47.78 分「难」,同一段文本相差 49.51 分。这不是谁算错了,而是两套口径在量纲上就不同。所以本页明确采用适配式:

FRE_zh = 206.835 − 1.015 × (汉字数 ÷ 句数) − 84.6 × (汉字数 ÷ 词数)

也就是把「音节」换成「汉字」,把「词」换成中文分词得到的词。这是适配而不是原式,两条系数照搬只为保持量级可比,并不等于原式在中文语料上做过标定——页面上所有分数都按这一句解释。

分词用 Intl.Segmenter,不自己写规则。词数来自 new Intl.Segmenter('zh-Hans', { granularity: 'word' }),这是 ECMA-402 定义的标准 API,浏览器与 Node 的实现共用同一套 Unicode 断词数据(UAX #29)。它比「按标点切」或「按两字一滑」可靠得多,也不需要下载词典。若运行环境没有这个 API——主要是 2024 年之前的 Firefox——本页会降级为「每个汉字算一个词」的近似,并在提示区写明「词长口径已降级」,此时平均词长会固定成 1.00、分数会明显偏高。

分词口径不同,分数就不同,这一条必须讲透。同一段 344 个汉字的示例:按 Intl.Segmenter 分词得到 217 个词、平均词长 1.5853 字、分数 47.78;按「一字一词」得到 178 个词、平均词长 1.0000、分数 97.30。仅仅换分词口径,分数就差了 49.51 分。所以你拿同一篇文章去两家在线工具,得到两个完全不同的分数时,第一件要做的事是对比分词口径,而不是怀疑其中一家算错了。

英文段落走原式,两套分并列显示,不混算。纯英文样本 The readability of a page affects how long visitors stay on it. 有 12 个词、1 句、19 个音节(用「元音组」启发式数出来),词/句 = 12.0000、音节/词 = 1.5833,代进原式得 60.7050 分;同一套数据代进 Flesch-Kincaid 得 7.77 学年级。音节用启发式数会出错:table、people 这类「辅音 + le」结尾的词实际 2 个音节但规则算 2 个(巧合对了),science、quiet 实际 1 个音节却被算成 2 个。所以英文分数只当参考,别拿去和词典逐词核对。

分句不依赖 lookbehind。切句用「先把终止符替换成哨兵字符、再按哨兵切分」的写法,不用 (?<=[。!?]) 这类零宽断言。原因是 Safari 16.4 以前不支持 lookbehind,正则里写了它会在解析阶段直接抛 SyntaxError,整个脚本一行都不执行,页面表现为「点了没反应」。哨兵字符选 \u0001,正常文本里不会出现。

最后一句必须说清:分数不等于搜索引擎排名。可读性分只描述「这段文本读起来费不费力」,它对内容的准确性、权威性、是否满足搜索意图一无所知。排名取决于页面是否真正解决了查询需求,可读性只是影响停留时长与跳出率的间接因素之一。把分数当体检指标而不是排名开关,才是它的正确用法。

完整示例(数值仅作演示)

与页面默认值完全一致:示例文章 14 句、344 个汉字、384 个码点、UTF-8 共 1126 字节,长句阈值 30 字。实测:

把两个极端样本放进来对照:全是短句的「很好。今天很好。明天也好。价格低。买吧。这货行。」只有 18 个汉字、6 句,平均句长 3.00 字、平均词长 1.50 字,得分 76.89(较易读);而把一个 140 字的超长句当整篇文本,平均句长 140.00 字,得分直接掉到 −79.70——分数可以为负,这不是 bug,而是公式在句长远超系数适用范围时的线性外推,页面会照实显示负分而不夹紧到 0。

输入范围与对照表

输入长度上限 20000 个码点,中文分支要求至少 20 个汉字,英文分支要求至少 3 个单词。下限不是随便定的:只有 1 个汉字的文本,句数 1、平均句长 1、平均词长 1,套公式会得到 121 分的假高分,样本方差在这么短的文本上完全没有意义。

分数区间档位典型文本说明
90 ~ 100极易读口语化短句、面向大众的通知可作科普与公告的基线
80 ~ 89易读普通新闻、产品说明多数面向用户的内容落在这里
70 ~ 79较易读行业媒体、教程专业词开始出现,需要过渡句
60 ~ 69标准多数企业官网正文英文写作的常规目标区间
50 ~ 59较难技术文档、研究报告句子偏长或术语密度偏高
30 ~ 49难合同条款、学术论文需要拆句或加解释才有更好的留存

常见误用对照。

常见说法为什么不成立
「可读性分越高,排名越好」分数只衡量句长与词长,对内容是否满足搜索意图、是否权威一无所知。它是一个留存侧指标,不是排名因子
「同一篇文章两个工具分数不一样,肯定有一个算错了」更可能是分词口径不同。示例里仅把「一字一词」换成标准分词,分数就从 97.30 变成 47.78
「把长句阈值调到 60,长句率就低了,文章就更好读」阈值只影响标注与长句率,不影响可读性分。分数用的是全部句子的平均句长,调阈值不会让文章真的变短
「英文和中文可以直接比分数」中文走的是适配式,英文走的是原式,两者量纲不同。跨语言比较没有意义

输入范围、边界与精度说明

常见问题

为什么我的文章分数很低,但读起来并不费力?

先看平均词长。如果你的文章里有很多四字成语或专业名词,分词器会把它们各算成一个词,每个词 4 个汉字,平均词长被推高到 2.0 以上,仅这一项就能扣掉 20 分以上。这不是文章难读,而是中文适配口径对「词」的定义偏长导致的系统性偏移。可以看逐句明细里哪些句子被标成长句,比只看总分更有意义。

Flesch 分数到底该拿多少当目标?

没有普适目标,只有相对目标。同一个作者、同一类内容的文章,把历次分数拉一条线,看到趋势比看绝对值有用。真要给一个参考:面向大众的科普与公告落在 70 分以上比较舒服,技术文档落在 50 分上下属于正常,合同条款落到 30 分也不必强行改——那类文本的可读性本来就让位于精确性。

Intl.Segmenter 是什么?为什么不用词典分词?

它是 ECMA-402 定义的分词 API,底层用 Unicode 的 UAX #29 文本分段规则,浏览器原生实现,不需要下载词库。代价是它的断词粒度偏保守,专有名词常常被切成两段(示例里「搜索引擎」被切成「搜索」与「引擎」两个词),这也是本页平均词长在 1.5 到 1.9 之间而不是 2.0 以上的一部分原因。想要更贴合行业词典的分词需要引入词典文件,会突破本页 8 KB 的内联脚本预算,所以没有采用。

长句阈值改成 40,为什么可读性分没变?

因为可读性分只用两个量:全部句子的平均句长和平均词长。阈值只决定哪些句子在明细表里被标成「长句」、以及「长句占比」这个百分比。这个设计是刻意的:如果阈值能影响总分,那调参数就能刷分,分数就失去跨文章可比性了。阈值的作用是帮你定位要改哪几句。

英文部分也按中文口径算吗?

不是。英文比例占优的文本会走 Flesch 原式:句数按 .!? 切,词数按空格切,音节数用「连续元音字母组」的启发式估算。这个启发式在 science、quiet 这类词上会多算一个音节,在 table 这类「辅音 + le」结尾的词上偶尔算对,整体误差在 ±10% 量级,够用但不精确。页面上两类分数并列显示,不会混成一个数。

为什么示例文章 344 个汉字却要 1.15 分钟?

因为换算用的速度是每分钟 300 个汉字,344 ÷ 300 = 1.1467 分钟,约 1 分 9 秒。这个数字只描述「把汉字逐个读过去」的时间,不含理解与回看。真实阅读技术性内容时,回看和停顿会让实际用时明显更长,所以它只适合用作量级参考。

标点、数字、英文单词怎么算?

句长的分子只数汉字,标点与数字都不计数;句数的分母按句末终止符(。!?;…!?)与换行来切;词数交给 Intl.Segmenter,它会把连续的拉丁字母和数字串整体算作一个词。所以「2026 年」在句长里是 1 个汉字,在词数里也是 1 个词,两种口径是一致的:都不把数字拆成单个字符。

分数能直接拿来判断文章能不能发布吗?

不能单独用来判断。它能量化的是句长与词长这两个维度,而发布与否还取决于事实是否准确、结论是否有依据、是否满足目标读者的搜索意图。合理的用法是把它当体检里的某一项指标:偏高时看逐句明细,改掉最长的两三个句子,再测一次确认变化,而不是为了刷到一个好看的分数去把文章改得支离破碎。

相关工具