JavaScript实现文本相似度对比
本文介绍如何在JavaScript前端利用编辑距离算法实现文本相似度对比。针对后端接口处理长文本耗时的问题,提出纯前端解决方案。通过具体案例演示如何计算两个文本串的相似度百分比,并提供了完整的JS代码实现,适用于内容查重与创新度分析场景。
一、发现问题
在开发流程中,常需处理两个或多个文本内容,旨在宏观掌握文本重合度,更好区分创新度,并有效避免大篇幅复制现象。
基于此,可通过对比两个文本的相似度来满足业务需求。
二、解决问题
若采用后端语言1处理,需调用接口。少量短文本对比可行,但若在界面实现多文本且篇幅巨大时,通过接口可能导致耗时过长。因此,不如直接由前端处理。
采用算法:编辑距离。
1、编辑距离的概念
设A和B为两个字符串,通过最少的字符操作将字符串A转换为B。字符操作包括:(1)删除一个字符;(2)插入一个字符;(3)将一个字符改写为另一个字符。将字符串A变换为字符串B所需的最少字符操作数称为字符串A到字符串B的编辑距离(Edit Distance)
2、测试文本
举例,文字来自网络。
文本1
北京商报讯(记者 魏蔚)1月21日,交通运输部官方微信公众号披露,1月20日上午,交通运输新业态协同监管部际联席会议办公室对满帮、货拉拉、滴滴货运、快狗打车等4家互联网道路货运平台公司进行约谈,对滴滴出行、曹操出行、T3出行、美团出行等4家网约车平台公司进行提醒。
文本2
智通财经APP获悉,1月20日,交通运输新业态协同监管部际联席会议办公室对满帮、货拉拉、滴滴货运、快狗打车等4家互联网道路货运平台公司进行约谈,对滴滴出行、曹操出行、T3出行、美团出行等4家网约车平台公司进行提醒。
3、代码实现
实现代码如下,最后返回的数据逻辑可自行修改。
/**
* 相似度对比
* @param s 文本1
* @param t 文本2
* @param f 小数位精确度,默认2位
* @returns {string|number|*} 百分数前的数值,最大100. 比如 :90.32
*/
function similar(s, t, f) {
if (!s || !t) {
return 0
}
if(s === t){
return 100;
}
var l = s.length > t.length ? s.length : t.length
var n = s.length
var m = t.length
var d = []
f = f || 2
var min = function (a, b, c) {
return a < b ? (a < c ? a : c) : (b < c ? b : c)
}
var i, j, si, tj, cost
if (n === 0) return m
if (m === 0) return n
for (i = 0; i <= n; i++) {
d[i] = []
d[i][0] = i
}
for (j = 0; j <= m; j++) {
d[0][j] = j
}
for (i = 1; i <= n; i++) {
si = s.charAt(i - 1)
for (j = 1; j <= m; j++) {
tj = t.charAt(j - 1)
if (si === tj) {
cost = 0
} else {
cost = 1
}
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + cost)
}
}
let res = (1 - d[n][m] / l) *100
return res.toFixed(f)
}4、相似度对比结果
根据测试文本对比,结果为:
75.00
到此这篇关于JavaScript实现文本相似度对比的文章就介绍到这了,更多相关js文本相似度内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
