这套测试是怎么算的
没有模型,没有云端接口,没有偷偷训练。全部是字符串统计加一次加权距离比较。下面把每一步写清楚,你甚至可以照着改一版。
总览
一段文字进来,先去掉多余空格和空行,然后切句。每个句子统计汉字数,每个分句也统计一次。接着用六张词表去数词,用一组正则去数标点。所有原始计数都换算成每百字频次,避免长短样本不可比。
频次经过归一化,得到八个可以展示的刻度,再加两个只参与匹配的维度(文言浓度、引语浓度),凑成十维坐标。36 位作家各有一套自己的十维坐标,按重要程度加权算距离,最近的胜出。坐标是手写的近似值,不是对全集做统计。
整个过程在一瞬间完成,不请求网络。分析代码就是页面上加载的那个 analyzer.js,没有压缩混淆,可以直接查看。
01句子怎么切
先按“。!?…”切句,再按“,、;:”切分句。引号里的内容照样算进去,不单独处理。
02词怎么算
用词表做匹配,一个词每次出现计一次。像“了”这种到处都是的字,权重压到三成,避免把所有人都算成口语。
03比例怎么来
所有词频换算成“每百字出现几次”,这样长短样本可以放在一起比。
04刻度怎么定
每个指标都有一个日常范围,落在范围下限记 0,上限记 100,中间线性折算。超出就截断,不让极端值带跑结果。
05作家怎么对
36 位作家各有一套语言坐标,共十维,由 8 个文风族的基准加个人偏移合成。计算你的坐标与每一套的加权距离,距离最近的排第一。
06匹配度是什么
由距离换算成百分数,方便看。它只表示接近程度,不表示质量。
十个维度
作家匹配用的坐标
其中前八个会显示成刻度条,后两个只在后台参与计算,因为它们的含义太技术化,放在结果页容易让人误读。
| 维度 | 取值依据 | 说明 |
|---|---|---|
| 句子长度 | 平均汉字数 | 8 字以下记 0,42 字以上记 1,中间线性。 |
| 句长起伏 | 句长标准差 / 平均句长 | 变异系数,0.15 以下算平,1.0 以上算跳。 |
| 口语浓度 | 口语词频次 − 文言词频次 × 1.1 | 两类词此消彼长,放在一个轴上比。 |
| 意象浓度 | 自然物象 + 身体感受 | 身体词乘 1.3,因为它们同样具体。 |
| 抽象浓度 | 抽象名词频次 | 减去一部分意象分,避免“既具体又抽象”的误判。 |
| 对话感 | 引号对数 + 第二人称 + 破折号 | 三个都指向“有人在说话”。 |
| 情绪外露 | 感叹号、问号、反问、比喻、情绪词 | 不是测情绪多少,是测情绪写在纸上的程度。 |
| 论理倾向 | 连接词、分号、冒号、抽象词 | 论证型写作的典型标记。 |
| 文言浓度 | 矣、焉、兮、之、其、而等 | 只参与匹配,不显示刻度。 |
| 引语浓度 | 引号对数的频次 | 只参与匹配,不显示刻度。 |
匹配时不是所有维度一样重要。比如老舍把引语浓度和口语浓度的权重调到三倍,因为这两项最能把他和别人分开;木心把文言浓度加权到三倍。权重写在作家库的数据里,和坐标放在一起。
需要说明的是,这八套坐标是我按他们的语言习惯手写的,不是把全集丢进去算出来的。它抓的是大方向:句长、虚实、口语与书面、标点密度。别把它当成作家指纹。
距离用加权均方根,越接近 0 越像。百分数是把距离线性映射到 52 到 95 之间,纯粹为了好读,不用当真。两位作家只差一两分,就说明你的文字确实在两者之间。36 位里有不少邻居,这种并列很常见。