文本相似度
逐项计算两段文本的 Levenshtein 编辑距离与归一化相似度、Jaro-Winkler、Dice(bigram)、余弦相似度(词频)、最长公共子序列、包含关系,并高亮字符差异、统计长度;大文本有长度上限保护。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
相似度指标
30.57140.74600.74600.36360.00004 (0.5714)互不包含 · 3把 A 改成 B 需要的单字符插入 / 删除 / 替换次数。
1 − 编辑距离 / 较长串长度,1 表示完全相同。
考虑匹配窗口与换位次数的相似度,适合短字符串。
在 Jaro 基础上给相同前缀加权,适合姓名、拼写近似。
比较相邻两字符组合的重合度,0–1。
把两段文本转成词频向量后计算夹角余弦;中文按字分词。
不要求连续的公共子序列长度(含占比)。
一段文本是否为另一段的子串,以及最长公共子串。
差异高亮
红色字符是差异部分(基于最长公共子序列)。
kitten
sitting
长度统计
| — | 文本 A | 文本 B |
|---|---|---|
| 字符数 | 6 | 7 |
| 去空白字符数 | 6 | 7 |
| 词数 | 1 | 1 |
| 行数 | 1 | 1 |
| 字节数(UTF-8) | 6 | 7 |
这个工具能做什么
- 判断两段文字到底有多像:改了一版文案、两个版本的标题、疑似重复的评论,都能一次看到多个相似度指标。
- 挑合适的指标来对比:短字符串看 Jaro-Winkler,长段落看 Dice(bigram)或余弦,字符级改动看 Levenshtein 距离。
- 用差异高亮定位改动位置:红色字符就是两边不一致的地方,比一行行肉眼比对快得多。
- 顺手拿到两段文本的长度统计(字符、去空白字符、词、行、UTF-8 字节),不用再开一个字数统计工具。
示例
输入
A: kitten B: sitting
输出
Levenshtein 距离:3 归一化相似度:0.5714 Jaro:0.7460 Jaro-Winkler:0.7460 Dice(bigram):0.3636 余弦(词频):0 最长公共子序列:4(0.5714) 包含关系:互不包含 · 3
默认不区分大小写;余弦是 0 是因为 kitten 和 sitting 没有任何一个完全相同的词。
常见问题
相似度 0.57 算高还是低?
没有统一标准,得看场景:短字符串里 0.57 通常意味着改动明显,而长段落里同样的数值可能只是换了几处措辞。判断时优先看 Levenshtein 距离(具体改了几个字符)和差异高亮,别只看一个百分比。
为什么 Jaro 和 Jaro-Winkler 数值一样?
因为 Jaro 小于等于 0.7 时不做前缀加成。Jaro-Winkler 只在两个字符串前缀相同且 Jaro 超过 0.7 时才会加分,kitten / sitting 的 Jaro 是 0.746 但首字符不同,所以前缀加成为 0。
余弦相似度为什么是 0?
余弦比较的是词频向量,只有完全相同的词才算重合。kitten 和 sitting 没有一个共同词(中文则按字分词),所以点积为 0。要比较字形层面的相似,请用 Dice(bigram)。
文本太长会怎样?
相似度指标单侧上限 20000 字符,超出直接报错;差异高亮更严格,单侧 3000 字符且 DP 矩阵不超过 400 万元素。这是为了避免 O(n×m) 的动态规划把浏览器主线程卡死。
文本会上传吗?
不会。所有指标都在浏览器本地用 JavaScript 计算,页面不发任何网络请求。
关键词:文本相似度similaritylevenshtein编辑距离jaro-winklerdice余弦相似度cosinelcs差异diff