跳到主内容
UniKit

文本相似度

逐项计算两段文本的 Levenshtein 编辑距离与归一化相似度、Jaro-Winkler、Dice(bigram)、余弦相似度(词频)、最长公共子序列、包含关系,并高亮字符差异、统计长度;大文本有长度上限保护。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

两段文本

相似度指标

Levenshtein 距离3
归一化相似度0.5714
Jaro 相似度0.7460
Jaro-Winkler0.7460
Dice 系数(bigram)0.3636
余弦相似度(词频)0.0000
最长公共子序列4 (0.5714)
包含关系互不包含 · 3

把 A 改成 B 需要的单字符插入 / 删除 / 替换次数。

1 − 编辑距离 / 较长串长度,1 表示完全相同。

考虑匹配窗口与换位次数的相似度,适合短字符串。

在 Jaro 基础上给相同前缀加权,适合姓名、拼写近似。

比较相邻两字符组合的重合度,0–1。

把两段文本转成词频向量后计算夹角余弦;中文按字分词。

不要求连续的公共子序列长度(含占比)。

一段文本是否为另一段的子串,以及最长公共子串。

差异高亮

红色字符是差异部分(基于最长公共子序列)。

kitten
sitting

长度统计

—文本 A文本 B
字符数67
去空白字符数67
词数11
行数11
字节数(UTF-8)67

这个工具能做什么

  • 判断两段文字到底有多像:改了一版文案、两个版本的标题、疑似重复的评论,都能一次看到多个相似度指标。
  • 挑合适的指标来对比:短字符串看 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

同类工具