杂记 › 技术笔记 › 120 个词槽、15 条整句、1 句写死的开头:lorem-ipsum 的词表清点与重复片段实测

120 个词槽、15 条整句、1 句写死的开头:lorem-ipsum 的词表清点与重复片段实测

把生成器脚本整段切出来实测:拉丁词表 120 条、去重 115 个词,5 个重复词各占 2 槽,选中概率倍数实测 1.9727;开篇那句经典句是源码写死的,默认勾选下 1000 次抽样命中 100.0%。

连点几次重新生成,开头永远是那三个词

用占位文本时我有个疑问:每次重新生成,前三词都是 Lorem ipsum dolor,那句有没有参与随机。为此把生成器脚本整段切出来实测:切出的脚本块 124 行、4682 字符,一字不改丢进沙箱执行,输入用 stub 喂值;模板本体 175 行、8390 字节。

拉丁词表:120 个槽位、115 个不同词

清点 latinWords:数组 120 条,去重剩 115 个词,差的 5 个位置是重复占位——sed 下标 8 和 90、id 59 和 105、est 60 和 114、voluptas 85 和 112、omnis 111 和 115。按下标取词,这 5 个词被抽中的概率是别人的 2 倍:12 万次抽样(seed=23)实测双槽词平均 2011.2 次、单槽词平均 1019.5 次,倍数 1.9727。120 是条数,115 只是去重后的唯一词数。

平均词长 5.975 字符,最短 do 2 字符、最长 exercitationem 14 字符。

120 个槽位里有 5 个词各占 2 槽 单槽词平均 1019.5 次 双槽词平均 2011.2 次,倍数 1.9727

图 1:多出的 5 个槽位带来 2 倍概率

randInt 含上界,句长是 8 到 20 词的闭区间

randInt 源码带 +1,区间双端闭合:跑 100000 次 randInt(0,2),上界 2 命中 33447 次;randInt(8, 20) 的 13 档全命中,20 出现 7613 次。模板真实调用点同样跑 100000 次,120 个下标全可达,末槽 119 命中 849 次、期望 833.3,没有 off-by-one。

所以拉丁句词数不是定值:100000 句实测平均 13.9854 词、97.60 字符;40 万句里最短 30 字符、最长 199 字符。有放回导致同一句里重复抽到同一个词,55.57% 的生成句内部含重复词。句末固定一个句点,句内不出逗号。

开篇那句是 L127 整串塞进去的

这个页面是 Lorem Ipsum 占位文本生成器。generateLatinParagraph 的条件是三重门,只有首段首句且勾选时才把那句经典句整串推进数组——它不在词表里,56 字符、8 词、含 1 个逗号。默认档连跑 1000 次真实 generate(),前 3 词等于 Lorem ipsum dolor 的占比 100.0%,同口径取消勾选是 0.0%、开头种类数从 1 种变 1000 种。

旁证是逗号:关档 40 万句里逗号 0 个,开档 10 万句恰 500 个。默认 3 段 × 5 句下,这个零随机成分只占输出的 3.89% 字符、6.67% 句数。可复现口径要交代:页面不提供种子,全文 seed 计数 0,上面这些分布都是探针层替换 Math.random 才跑出来的。

同参数连跑 1000 次,重复的是那一句

口径:3 段 × 5 句连跑 1000 次,即 15000 句、3000 段、1000 份。拉丁开档 15000 句里不同 14001、重复键只有 1 个,即经典句的 1000 份副本,最长重复句 8 词 56 字符,段与整份零重复;关档 15000 句全不同。中文档 15000 句只出自 15 个值,每条出现 967 到 1055 次,3000 段撞出 5 个重复段——空间是 15 的 5 次方即 759375,生日期望 5.93;每段句数压到 1,整份输出只剩 868 个不同、最多重复 3 次。不替换 Math.random 复核也是同一结构。

3 段 × 5 句连跑 1000 次:15000 句 / 3000 段 / 1000 份 拉丁 勾选 重复键 1,即经典句 1000 份;段级 0 拉丁 关勾选 15000 句全不同,重复键 0

图 2:1000 连跑的重复账

中文档是 15 条整句,不是字表

chineseSentences 有 15 条、整表零重复,长度 20 到 25 字符、平均 22.2 字符,合计 333 字符即 999 字节。句号写死在每条串里,抽中哪句贴哪句,字与字之间没有任何随机性。generateChineseParagraph 用空串拼接,段内不插空格与换行:实测一个 5 句段 112 字符,反查全是库内整句。

字符与字节是两本账

口径拉丁档中文档
3 段 × 5 句1433 字符 = 1433 字节335 字符 = 997 字节
20 段 × 10 句19776 字符 = 19776 字节4458 字符 = 13298 字节
统计条第三格单词数 201字数 335

拉丁档纯 ASCII,非 ASCII 字节 0;中文档每个全角字符固定 3 字节,335 字符里 4 个换行,331 乘 3 加 4 得 997。同参数下字符比 0.2338、字节比 0.6957。中文档那格写作「字数」,与「总字符数」永远同值,含标点与换行,不是汉字数也不能当字节数用。

非法输入静默兜底,页面没有一句错误文案

换算链是 parseInt、假值兜默认、再夹上下界,min 与 max 属性对脚本无约束。段落框输 0 得到的是默认 3 段而不是下限 1,负数才被夹成 1;10000 夹成 20 段 × 10 句,实测 19466 字符、2.439 ms;默认档连跑 5000 次平均 0.165 ms。parseInt 还会把 0x10 读成 16 段、把 1e3 只认到 1 段。全文 try、catch、alert 与「错误」计数全 0,download 与 Blob 也是 0,唯一出口是复制。

勾选框只管拉丁档:generateChineseParagraph 是单参函数,不读它,同 seed 下中文档勾选与取消的输出逐字节相同,都是 345 字符。shuffle 在全文 175 行里只出现 1 次,即 L102 的定义行,零调用点。句子不是打乱词表得来的:840510 个相邻二元组里,经典原文的相邻对只命中 618 次、占 0.0735%,与不看上文的期望 58.37 次同量级;sed do 因 sed 占 2 槽得 120 次。打乱该怎么写,旧文 shuffle 该用哪种写法 另有一篇。

文案与代码的 11 条对照

逐条判定 11 条:一致 6、部分一致 3、冲突 2。冲突一是那句「不是随机文本」,默认档唯一确定的只有开头 56 字符;冲突二是输出框那句占位提示,脚本末尾无条件跑一次 generate(),首屏即有值,不会显示。

FAQ

Q:为什么每次开头都是 Lorem ipsum dolor sit amet?

那是源码里的一整串,只在首段首句且勾选时推进数组,1000 次抽样命中 100.0%,关勾选同口径 0.0%。

Q:词表到底是 120 还是 115?

数组是 120 条,115 是去重后的唯一词数;按下标取词,那 5 个各占 2 槽的词概率翻倍,实测倍数 1.9727。版面与体量怎么估是另一件事,见旧文 占位文本怎么写才不像模板。

Q:中文档是随机拼字吗?

不是。它是 15 条整句的库,抽中哪条贴哪条,段内空串拼接、不加分隔符,每段句数压到 1 时 1000 份整输出只剩 868 个不同。

📎 相关文章

SVG 预览的尺寸听谁的:显示框恒等于容器,删掉 viewBox 后 r=1 实测 2 像素 2026-11-05 文本分列后空字段没丢:a,,b 照留、列号越界填空、填 0 或 abc 退回全部列实测 2026-11-05 13 位连写只截出 11 位:text-extract 七个内置类型的正则边界实测 2026-11-05 1 GB 文件由 1024 块拼成:任意大小文件生成的分块节奏、取消边界与三种填充字节 2026-11-04 文件名提取的三处边界:结尾斜杠只兜一格、查询串整块留下、空行静默消失 2026-11-04