如何用JavaScript编写算法进行文本相似度比较?

更新于
2026-09-25 00:59:38
1阅读来源:SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1394个文字,预计阅读时间需要6分钟。

如何用JavaScript编写算法进行文本相似度比较?

目录

一、发现问题

二、解决问题

1.编辑距离的概念

2.测试文本

3.代码实现

4.相似度对比结果

一、发现问题

在开发过程中,难免会遇到各种问题。本文将探讨一个常见问题:编辑距离,并给出解决方案。编辑距离是指在两个字符串之间进行插入、删除和替换操作,将一个字符串转换为另一个字符串所需的最少操作次数。

二、解决问题

1.编辑距离的概念

编辑距离是指将一个字符串通过插入、删除和替换操作转换成另一个字符串所需的最少操作次数。

2. 测试文本为了验证我们的实现,我们需要准备一些测试文本。以下是一些示例:

- kitten -> sitting- horse -> ros- saturday -> sunday

3. 代码实现下面是计算编辑距离的Python代码实现:

pythondef edit_distance(s1, s2): if len(s1)

if len(s2)==0: return len(s1)

previous_row=range(len(s2) + 1) for i, c1 in enumerate(s1): current_row=[i + 1] for j, c2 in enumerate(s2): insertions=previous_row[j + 1] + 1 deletions=current_row[j] + 1 substitutions=previous_row[j] + (c1 !=c2) current_row.append(min(insertions, deletions, substitutions)) previous_row=current_row

return previous_row[-1]

测试文本text1=kittentext2=sittingresult=edit_distance(text1, text2)print(The edit distance between '{}' and '{}' is: {}.format(text1, text2, result))

4. 相似度对比结果通过对比不同文本的编辑距离,我们可以了解它们之间的相似程度。例如,kitten 和 sitting 之间的编辑距离为 3,意味着它们非常相似。而 horse 和 ros 之间的编辑距离为 3,也表明它们有较高的相似度。然而,saturday 和 sunday 之间的编辑距离为 3,说明它们只是部分相似。

目录
  • 一、发现问题
  • 二、解决问题
    • 1、编辑距离的概念
    • 2、测试文本
    • 3、代码实现
    • 4、相似度对比结果

一、发现问题

在开发过程中,难免会使用到2个(多个)文本内容处理,一是便于宏观知道文本的重合度,而是更好的区分文本的创新度,也能更好的避免出现大篇幅复制。

为此,可以通过2个文本的相似度对比来实现业务需求。

二、解决问题

如果使用后端语言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、代码实现

实现代码如下,最后返回的数据逻辑可以自行修改。

如何用JavaScript编写算法进行文本相似度比较?

/** * 相似度对比 * @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文本相似度内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

本文共计1394个文字,预计阅读时间需要6分钟。

如何用JavaScript编写算法进行文本相似度比较?

目录

一、发现问题

二、解决问题

1.编辑距离的概念

2.测试文本

3.代码实现

4.相似度对比结果

一、发现问题

在开发过程中,难免会遇到各种问题。本文将探讨一个常见问题:编辑距离,并给出解决方案。编辑距离是指在两个字符串之间进行插入、删除和替换操作,将一个字符串转换为另一个字符串所需的最少操作次数。

二、解决问题

1.编辑距离的概念

编辑距离是指将一个字符串通过插入、删除和替换操作转换成另一个字符串所需的最少操作次数。

2. 测试文本为了验证我们的实现,我们需要准备一些测试文本。以下是一些示例:

- kitten -> sitting- horse -> ros- saturday -> sunday

3. 代码实现下面是计算编辑距离的Python代码实现:

pythondef edit_distance(s1, s2): if len(s1)

if len(s2)==0: return len(s1)

previous_row=range(len(s2) + 1) for i, c1 in enumerate(s1): current_row=[i + 1] for j, c2 in enumerate(s2): insertions=previous_row[j + 1] + 1 deletions=current_row[j] + 1 substitutions=previous_row[j] + (c1 !=c2) current_row.append(min(insertions, deletions, substitutions)) previous_row=current_row

return previous_row[-1]

测试文本text1=kittentext2=sittingresult=edit_distance(text1, text2)print(The edit distance between '{}' and '{}' is: {}.format(text1, text2, result))

4. 相似度对比结果通过对比不同文本的编辑距离,我们可以了解它们之间的相似程度。例如,kitten 和 sitting 之间的编辑距离为 3,意味着它们非常相似。而 horse 和 ros 之间的编辑距离为 3,也表明它们有较高的相似度。然而,saturday 和 sunday 之间的编辑距离为 3,说明它们只是部分相似。

目录
  • 一、发现问题
  • 二、解决问题
    • 1、编辑距离的概念
    • 2、测试文本
    • 3、代码实现
    • 4、相似度对比结果

一、发现问题

在开发过程中,难免会使用到2个(多个)文本内容处理,一是便于宏观知道文本的重合度,而是更好的区分文本的创新度,也能更好的避免出现大篇幅复制。

为此,可以通过2个文本的相似度对比来实现业务需求。

二、解决问题

如果使用后端语言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、代码实现

实现代码如下,最后返回的数据逻辑可以自行修改。

如何用JavaScript编写算法进行文本相似度比较?

/** * 相似度对比 * @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文本相似度内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!