句子统计

粘贴一段中文或英文,按句末标点把它切成一句一句,立刻给出句数、平均句长、最长句、最短句、中位句长、长句数和疑问句数。小数点 3.14 和 Mr. 这类缩写不会被误当成句末,连续标点 ?!、…… 只算一处结束。

句数8含末尾无标点的残句
总字数169非空白字符,含标点
平均句长21.13 字169 ÷ 8
最长句64 字第 3 句
最短句5 字真的吗?!
中位句长14 字8 句取中间两句均值
长句(>30 字)1 句阈值可在上面调
疑问句2 句句末含 ? 或 ?
句长分档句数占比说明
≤ 10 字337.5%短句
11 ~ 20 字225.0%常见区间
21 ~ 30 字225.0%可考虑拆分
> 30 字112.5%长句易读丢主干
#句长句末标点句子内容
16。第一句很短。
229。Mr. Smith 买了 3.14 公斤苹果,一共花了 27.6 元。
364。这是第三句,它比较长,用来演示平均句长是怎样被长句拉高的:平均句长等于总字数除以句数,所以只要有一句特别长,平均值就会明显上移。
45?!真的吗?!
512……他站在门口犹豫了很久……
68。最后还是没进去。
716?What is a sentence?
829! A sentence ends with punctuation!

提示:统计随输入自动完成,不需要点按钮;文本框里按 Ctrl + Enter(macOS 用 Cmd + Enter)可以立刻重算一次。文本框为空时不会自动填示例,点「载入示例」可随时还原。

使用方法

  1. 把文章粘进上面的文本框,或直接在里面输入。结果是实时更新的,页面打开时已经预置了一段 6 行示例,统计卡上显示的就是它的结果。
  2. 看句数:示例是 8 句。末尾如果有一段没有句末标点的文字,也会按一句残句计入,卡片下方的提示条会点出来。
  3. 看平均句长:示例 169 ÷ 8 = 21.13 字。这是判断文章节奏最常用的一个数,投稿和改写时先盯它。
  4. 再对一遍最长句 64 字和最短句 5 字:两者差得越多,说明节奏越不均匀,通常是最长那句该拆。
  5. 「长句阈值」默认 30 字,可填 10 到 200、步长 5;改了之后只有「长句」那张卡片跟着变,下面的分档表固定按 ≤10 / 11–20 / 21–30 / >30 四档统计。
  6. 想看看保护规则起了多大作用,把「保护小数点与缩写」勾掉:示例的句数会从 8 变成 11。文本框里按 Ctrl + Enter 可跳过延迟立即重算。

这个句子统计工具能解决什么问题

一是改写长稿时定位该拆的句子。一篇稿子读着累,往往不是整体太长,而是少数几句塞了太多信息;按句长降序一眼就能找到那几句,示例里第 3 句 64 字、占全文 38% 的长度,就是典型的拆分对象。

二是核对字数口径。约稿方说「3000 字、长短句要均匀」,先把平均句长和长句数算出来,再决定是拆句还是补句,比通读一遍凭感觉靠谱。

三是检查翻译稿和机器译文。直译出来的中文常常句长异常,平均句长一对比就能发现整段是不是照搬了原文的从句结构。

四是验证自己的切分规则对不对。把「保护小数点与缩写」勾掉再勾上,看句数差值,就知道手上的文本里有多少处 3.14、Mr. 这类容易被别的工具误判成句末的地方。

本页不做这些事:不数总字数和总字符数(那是另一种口径,请用字数统计工具)、不算字节数和存储体积(请用字符数统计工具)、不做分词与词频排行、不检查错别字和语病、不统计关键词密度。要按行而不是按句切分,请用行统计。

切分规则与句长口径

句子统计的切分用的是 String.prototype.split 带捕获组的写法:x.split(/([.!?。!?]+|…+)/)。捕获组让返回的数组变成「正文、终止符、正文、终止符……」交替排列,配对之后每一句都保留了自己的句末标点,疑问句判定和「末尾残句」判定才有依据。正则里用 + 而不是单个字符,是为了把连续标点并成一处:?!、?!、……、。。。 都只算一次结束,不会一句拆成三句。

句末标点池为什么会是这七个:半角 . ! ? 加全角 。 ! ? 再加省略号 …。分号、冒号、逗号一律不算句末——按 GB/T 15834-2011《标点符号用法》,句末点号是句号、问号、叹号三种,分号和冒号属于句内点号,只表示停顿层次;换行同样不算句末,它只是排版上的换行,一段文字中间敲回车不会让句子结束。省略号被收进来是因为它常常出现在句末表示语意未尽,代价是句中省略号也会被当成结束,这一点在边界一节里说清楚了。

假切分靠两次 String.prototype.replace 提前挡掉。第一次 /(\d)\.(\d)/g 把小数点换掉,所以 3.14、27.6 里的点不会被当句末;第二次 /\b(Mr|Mrs|Ms|Dr|Prof|Sr|Jr|St|vs|etc|Inc|Ltd|Co|No)\./g 处理 15 个常见英文缩写。替换用的占位符是 U+E000,属于 Unicode 私有使用区(PUA),正常文本里不会出现,所以不会和保护符本身撞车;换成 #、@ 这类常见字符就不行,正文里一旦出现同样的字符就会被误还原。

句长按「非空白字符的码点数」算:Array.from(s.replace(/\s/g, '')).length。这里不用 s.length,因为 JavaScript 的字符串以 UTF-16 存储,length 数的是码元,遇到 emoji、部分扩展 B 生僻字这类补充平面字符会数出 2;用数组展开走字符串迭代器才是码点。句长含句内标点、不含任何空白,所以示例里 8 句的字数是 6、29、64、5、12、8、16、29,加起来正好是全文的非空白字符数 169——这两个数永远相等,可以当作自查口径。

平均句长不是「去掉标点的字数除以句数」,而是 总字数 ÷ 句数,其中总字数含标点。示例 169 ÷ 8 = 21.13 字;如果先把标点剔掉,同样这段是 150 字,平均就变成 18.75 字,两个数字不能混用。中位句长取排序后正中间那句,句数为偶数时取中间两句的平均(示例排完序是 5、6、8、12、16、29、29、64,中间两句 12 和 16,得 14)。

常见误用的正确解释:把「平均句长 21 字」当成「每句都差不多 21 字」是最大的误读。平均量对极端值极敏感,示例里最长那句 64 字就把均值从 14 拉到了 21,所以看平均句长一定要同时看最长句和长句数,三个数一起看才有意义。

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

示例就是页面打开时文本框里那段 6 行文字,包含一句中文短句、一句带 Mr. 与两个小数点的中英混排、一句 64 字的长句、一句以 ?! 结尾的、一句带 …… 的,以及两句英文。实测结果:

把「保护小数点与缩写」勾掉后,同一段文字会被切成 11 句:Mr.、3.14、27.6 三处的点都被当成句末,各多切一次,净多 3 句(省略号仍在标点池里,不受影响)。这个 8 与 11 的差,就是保护规则在这段文本上的实际贡献。

句长分档与假切分对照表

分档表固定四档,用来看节奏分布;「长句」卡片跟随你填的阈值,两者互不覆盖,对照着看更清楚:

档位示例句数占比判据
≤ 10 字337.5%句长 ≤ 10
11 ~ 20 字225.0%10 < 句长 ≤ 20
21 ~ 30 字225.0%20 < 句长 ≤ 30
> 30 字112.5%句长 > 30

下面这些输入最容易产生「看起来像 bug」的结果,逐条列出本页的实际处理方式:

输入本页句数素切分句数为什么不一样
整段示例文字811Mr.、3.14、27.6 三处被保护,各少切一次,净差 3
真的吗?!11连续标点用 + 并成一处,两处一致
Mr. Smith 买了 3.14 公斤13素切分在 Mr. 和 3.14 处各切一刀
好……吧。21本页把省略号当句末,句中省略号也会被切开
啊。。。啊。21三个句号连用被 + 并成一处结束,只切一次
没有句末标点11末尾残句照样计入,提示条会标明它没有标点

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

常见问题

为什么这里的句数和 Word 的「句数」不一样?

Word 的段落/句子统计依赖语言分词器和它自己的标点规则,本页按 GB/T 15834-2011 的句末点号加半角 . ! ? 与省略号来切,且会保护小数点与缩写。示例文字在本页是 8 句,去掉保护则是 11 句,差异几乎都出在 Mr.、3.14 这类地方。

「平均句长 21 字」是不是说多数句子都是 21 字?

不是。平均值对极端值很敏感,示例里排完序是 5、6、8、12、16、29、29、64,中位句长只有 14 字,是被那句 64 字拉高了均值。判断节奏请同时看平均句长、中位句长和长句数,三个数差得越多说明越不均匀。

省略号为什么把我的句子切开了?

因为本页把 … 归入句末标点池。句末省略号(示例第 5 句「他站在门口犹豫了很久……」)本来就该结束,代价是句中省略号也会被切开,好……吧。 会算 2 句。想整句统计,把句中的省略号换成逗号或破折号即可。

小数点和小数点结尾的句子怎么区分?

靠「数字 + 点 + 数字」这个条件。3.14 满足,所以那个点被占位符替换掉不再切分;而「价格是 27。」这种以数字加半角点收尾的句子也会被当成小数点保护起来,从而不切分。中英混排的稿件遇到这种情况,建议把句末改成全角句号。

总字数到底含不含标点?

含。总字数是各句「非空白字符的码点数」之和,示例 169 字里包含 19 个标点字符;剔掉全部标点后是 150 字,平均句长会由 21.13 降到 18.75。两个口径都成立,但不能混着用,对外报数时先说明是哪一种。

能不能统计英文或中英混排的文章?

能。半角 . ! ? 和全角 。 ! ? 都在句末标点池里,Mr.、etc. 一类缩写已列入保护名单。名单之外的缩写会被误切,遇到时手动把那个点改成全角句号。

最长能统计多少字?逐句明细只显示 12 行怎么办?

文本上限 20 万字符(按 UTF-16 码元)。逐句明细默认渲染 12 行,点「加载更多」每次再加 12 行,几万句的长稿也不会卡住页面;CSV 导出按当前已展开的行生成,带 BOM 以便 Excel 打开中文不乱码。

我粘贴的文字会被上传吗?

不会。句数、句长、分档、CSV 全部由页面里的正则和字符串运算算出,不发任何网络请求,也不写入浏览器存储,刷新后文本框回到预置示例。想确认可以打开开发者工具的 Network 面板,输入时观察是否有请求发出。

相关工具