在TypeScript中,可以使用Levenshtein萊文斯坦距離算法來精確匹配兩個字符串的相似度百分比。Levenshtein距離是指兩個字符串之間,由一個轉換成另一個所需的最少編輯操作次數,這里的編輯操作包括插入、刪除、替換。
/*** Levenshtein距離算法來精確匹配兩個字符串的相似度* Levenshtein距離是指兩個字符串之間,由一個轉換成另一個所需的最少編輯操作次數,這里的編輯操作包括插入、刪除、替換*/
function levenshteinDistance(str1: string, str2: string): number {let m = str1.length;let n = str2.length;let dp: number[][] = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));for (let i = 0; i <= m; i++) {dp[i][0] = i;}for (let j = 0; j <= n; j++) {dp[0][j] = j;}for (let i = 1; i <= m; i++) {for (let j = 1; j <= n; j++) {if (str1[i - 1] === str2[j - 1]) {dp[i][j] = dp[i - 1][j - 1];} else {dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);}}}return dp[m][n];
}
//根據兩字符串的最大長度和計算得到的Levenshtein距離來計算相似度百分比
function calculateSimilarityPercentage(str1: string, str2: string): number {const maxLength = Math.max(str1.length, str2.length);const distance = levenshteinDistance(str1, str2);return 1 - distance / maxLength;
}
調用:
const queryAndSort = (word: string, targetWord: string) => {return calculateSimilarityPercentage(word, targetWord);
};
console.log(queryAndSort1("byte_id", "id"), "------------"); // 0.2857142857142857
console.log(queryAndSort1("byte_id", "byte_id"), "------------");// 1
通過這種方式實現的字符串相似度是比較準確的。無論是匹配中文、英文、還是中英結合的、或者正序倒序的都可以正確匹配出來~