JavaScript實現(xiàn)文本相似度對比
一、發(fā)現(xiàn)問題
在開發(fā)過程中,難免會使用到2個(多個)文本內(nèi)容處理,一是便于宏觀知道文本的重合度,而是更好的區(qū)分文本的創(chuàng)新度,也能更好的避免出現(xiàn)大篇幅復(fù)制。
為此,可以通過2個文本的相似度對比來實現(xiàn)業(yè)務(wù)需求。
二、解決問題
如果使用后端語言1來處理,就需要調(diào)取接口,對比少量的短文本可以實現(xiàn),但是一旦遇到在界面實現(xiàn)多個文本對比,并且篇幅巨多,再通過接口可能就出現(xiàn)耗時特別長的情況。既然如此,但不如直接使用前端來處理。
使用算法:編輯距離。
1、編輯距離的概念
設(shè)A和B是兩個字符串,使用最少的字符操作將字符串A轉(zhuǎn)換為B。字符操作包括:(1)刪除一個字符;(2)插入一個字符;(3)將一個字符改寫為另一個字符。將字符串A變換為字符串B所需要的最少字符操作數(shù)稱為字符串A到字符串B的編輯距離(Edit Distance)
2、測試文本
舉例,文字來自網(wǎng)絡(luò)。
北京商報訊(記者 魏蔚)1月21日,交通運輸部官方微信公眾號披露,1月20日上午,交通運輸新業(yè)態(tài)協(xié)同監(jiān)管部際聯(lián)席會議辦公室對滿幫、貨拉拉、滴滴貨運、快狗打車等4家互聯(lián)網(wǎng)道路貨運平臺公司進行約談,對滴滴出行、曹操出行、T3出行、美團出行等4家網(wǎng)約車平臺公司進行提醒。
智通財經(jīng)APP獲悉,1月20日,交通運輸新業(yè)態(tài)協(xié)同監(jiān)管部際聯(lián)席會議辦公室對滿幫、貨拉拉、滴滴貨運、快狗打車等4家互聯(lián)網(wǎng)道路貨運平臺公司進行約談,對滴滴出行、曹操出行、T3出行、美團出行等4家網(wǎng)約車平臺公司進行提醒。
3、代碼實現(xiàn)
實現(xiàn)代碼如下,最后返回的數(shù)據(jù)邏輯可以自行修改。
/** * 相似度對比 * @param s 文本1 * @param t 文本2 * @param f 小數(shù)位精確度,默認2位 * @returns {string|number|*} 百分數(shù)前的數(shù)值,最大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、相似度對比結(jié)果
根據(jù)測試文本對比,結(jié)果為:
75.00
到此這篇關(guān)于JavaScript實現(xiàn)文本相似度對比的文章就介紹到這了,更多相關(guān)js文本相似度內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript異步編程:異步數(shù)據(jù)收集的具體方法
我們先嘗試在不借助任何工具函數(shù)的情況下來解決這個問題。筆者能想到的最簡單的方法是:因前一個readFile的回調(diào)運行下一個readFile,同時跟蹤記錄迄今已觸發(fā)的回調(diào)次數(shù),并最終顯示輸出。下面是筆者的實現(xiàn)結(jié)果。2013-08-08JavaScript中isPrototypeOf函數(shù)作用和使用實例
這篇文章主要介紹了JavaScript中isPrototypeOf函數(shù)作用和使用實例,本文講解了它的作用和使用方法以及使用實例,需要的朋友可以參考下2015-06-06用Javascript評估用戶輸入密碼的強度實現(xiàn)代碼
用Javascript評估用戶輸入密碼的強度實現(xiàn)代碼,需要的朋友可以參考下。2011-11-11微信小程序wx.navigateTo中events屬性實現(xiàn)頁面間通信傳值,數(shù)據(jù)同步
這篇文章主要介紹了微信小程序wx.navigateTo中events屬性實現(xiàn)頁面間通信傳值,數(shù)據(jù)同步,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-07-07代碼塊高亮可復(fù)制顯示js插件highlight.js+clipboard.js整合
最近有個需求是將jsp頁面上的某一段代碼塊格式化成類似CSDN的代碼塊的樣式,而且很多平臺都使用了這樣的功能,下面就為大家簡單分享一下2021-02-02