把一整部 120 回的书贴进文本频率统计
有人把一整部 120 回的公版古籍原文粘进文本频率统计的字符框,回车后榜首不是任何汉字,而是一个出现 59260 次的逗号。这份 TXT 实测 2605929 字节、5496 行、无 BOM 的单一 UTF-8,非 ASCII 字节占 99.78%。
字节、码元、汉字是三本账
这份 120 回全本的原始文件在站内资源页 红楼梦资源页,字节数由 wc -c 与 fs.statSync 双口径互证都是 2605929。界面统计栏读的是 text.length,即 UTF-16 码元 872515,比字节少 1733414,字节除以码元约 3.0;而按 /[\u4e00-\u9fff]/g 只数汉字又是 732628。把整本喂进 文本频率统计,那一格读到的是 872515,不是文件名里的 2.6 MB——三个数各说各的账,不能互相替换。
回数三法为什么差 124、112、120
宽松正则命中 124 次,不等于 120 回:124 里 120 个是回目行(【与】各出现 120 次),另 3 处落在正文叙述、1 处是不带方括号的裸回目重出。严格汉字数字正则只命中 112 次,差的 12 处全在第 100 回以后——这段回目用「零」写法,字符类没收录「零」就整批漏计,112 加 12 与 124 闭合。第三条独立证据是把 120 个汉字回目逐行写进关键词栏,总命中报 124 次、未出现 0 个。
榜首是逗号,前 10 名里 4 个标点
整榜 4454 项按次数降序,汉字第一名是「了」21221 次排第 3、比逗号少 38039 次,「的」15719 排第 4;模板只跳四类空白、标点全参与排名,于是前 10 名里混进 4 个标点。下表给前 10 名:
| 名次 | 字符 | 次数 | 占比 |
|---|---|---|---|
| 1 | , | 59260 | 6.8 |
| 2 | 。 | 29462 | 3.4 |
| 3 | 了 | 21221 | 2.4 |
| 4 | 的 | 15719 | 1.8 |
| 5 | 不 | 15053 | 1.7 |
| 6 | 一 | 12179 | 1.4 |
| 7 | : | 11786 | 1.4 |
| 8 | 来 | 11445 | 1.3 |
| 9 | 道 | 11059 | 1.3 |
| 10 | ” | 10682 | 1.2 |
文言虚词全在低位:之 2147 次(全榜第 75 名)、也 6116、者 416、乎 70、矣 65、焉 26、哉 26。单看「之」只有「的」的 13.7%,教科书那条字母 E 约 12.7% 的密度尺子在这里没有任何单项接近。
逐回字数与行数不成正比
120 段去空白口径平均 7211.3 字每回、汉字平均 6105.2;最长第六十二回 11760 字,最短第十二回 4215 字,差 7545、比 2.79 倍。按行排名次会整个反过来:第七十八回 123 行只有 10653 字(诗帖行多),第七十四回 25 行却有 10956 字,逐回字数榜只能按去空白字数排。
图 1:字数榜 74 回高于 78 回,行数却是 78 回 123 对 74 回 25,两套名次互换
英文词频只出 7 项网址残渣
英文词频那格的分词口径是 /[a-zA-Z]+/g,只抓连续 ASCII 字母串:732628 个汉字贡献 0 个词,整本总单词数只有 8,默认 30 项停用词吃掉 by 后榜单剩 7 项,每行各 1 次 12.5%,全是末尾来源说明里的 https、zh、wikisource、org、wiki、cc、sa 网址残渣。勾上区分大小写变 8 项(BY 漏过滤),停用词清空是 8 项且占比和 100.0%(默认那档只有 87.5%);按回拆开喂,120 段里 119 段直接是「暂无数据」。
关键词计数读的是字样不是人物
关键词计数走 indexOf 非重叠扫描。三个角色词写三行:宝玉 3992、凤姐 1751、黛玉 1377,统计栏总命中 7120 次、未出现 0 个,三数相加正好闭合。但那格百分比是次数除以 872515 码元,宝玉显示 0.5%,按实占算是 7984 码元即 0.9151%,两格差一倍。列表不去重:黛玉写两遍就报 4 个关键词、8497 次,而文本里真实只有 7120 处。「林黛玉把花具且都放下」10 字在 23 回葬花段,「凤姐儿偏拣了一碗鸽子蛋放在刘姥姥桌上」18 字在 40 回。
三档字数口径逐档可解释
字数三档口径,每档差值都能用另一档实测解释:码元 872515 减模板跳过的四类空白 5742 得模板口径 866773;模板不吃全角空格,再减 1412 得去空白口径 865361;再减标点符号 132733 得汉字口径 732628。整榜 4454 项各自占比相加只有 81.4%,因为被跳过的空白仍留在分母。
图 2:码元到汉字四档口径逐档相减可闭合
整本一次贴进去的可行性算账
模板四个输入域都没有 maxlength,浏览器实测 .maxLength 读到 −1、getAttribute 为 null,代码里也无截断语句。按无上限口径,全文 872515 码元一次进框可容,赋值 4.7 毫秒、取回码元相等;连 3 倍全文 2617545 码元也塞得下,榜首随之变 177780 次正好三倍。代价在渲染:4454 行整表一次写入是 JS 77.3 毫秒加首帧 1046.7 毫秒约 1.12 秒,容器 scrollHeight 106896 像素对可视 320 像素,这个量级要粘贴一次算一次。
逐回跑与整本跑互相印证
120 段各跑一次字符频率共 117.7 毫秒、平均每次 0.98 毫秒,每回榜平均 953.2 项而整本一次 4454 项;但逐回次数合计 866773 与整本一次完全相等,切段不吞字。三模式耗时(Node 计时)是字符频率 58.7 到 76.9 毫秒、英文词频 3.2 到 7.0 毫秒、关键词三词 0.7 到 1.1 毫秒。文案对照 14 条判定 6 条一致、2 条冲突,冲突都落在密度口径上。
FAQ
Q:命中 124 次是不是说明有 124 回?
不是。124 是「第X回」字样出现次数,120 是回目行条数;多出的 4 处里 3 处是正文叙述用词、1 处是重复排版的裸回目。严格正则少 12 处只因「零」没进字符类。
Q:英文词频为什么几乎是空的?
切分表达式只认 ASCII 字母串,732628 个汉字进不了这张榜,整本只有末尾来源说明里的 8 个词,过滤停用词后剩 7 项残渣。
Q:那格百分比能当关键词密度吗?
不能。分母是总码元而非该词实占,宝玉显示 0.5% 而实占是 0.9151%。小文本上字频、词频与停用词的入门读数见旧文 文本频率停用词与中文计数说明。
Q:逗号当榜首有分析价值吗?
这是跳过名单不含标点所致,汉字首榜看「了」21221、虚词看「之」2147。