Перейти к основному содержимому
clawam tools
Инструменты Документы Daoark EN Главная Главная / Текстовые инструменты › Главная manifest.json 0 && j > 0) { if (a[i - 1] === b[j - 1]) { s = a[i - 1] + s; i--; j--; } else if (dp[i - 1][j] > dp[i][j - 1]) i--; else j--; } return s; } // 行级 diff function lineDiff(a, b) { var la = a.split('\n'); var lb = b.split('\n'); var out = []; var i = 0, j = 0; while (i < la.length || j < lb.length) { if (i < la.length && j < lb.length) { if (la[i] === lb[j]) { out.push(' ' + la[i]); i++; j++; } else { out.push('- ' + la[i]); out.push('+ ' + lb[j]); i++; j++; } } else if (i < la.length) { out.push('- ' + la[i]); i++; } else { out.push('+ ' + lb[j]); j++; } if (out.length > 100) { out.push('... (截断)'); break; } } return out.join('\n'); } function compare() { var a = getVal('text-a'); var b = getVal('text-b'); if (!a || !b) { showError('两段都需输入'); return; } var la = getVal('label-a') || 'A'; var lb = getVal('label-b') || 'B'; var lev = levenshtein(a, b); var jac = jaccard(a, b); var lcsStr = lcs(a, b); var maxLen = Math.max(a.length, b.length); var simLev = maxLen > 0 ? (1 - lev / maxLen) * 100 : 0; var simJac = jac * 100; var wordA = (a.match(/[\w\u4e00-\u9fff]+/g) || []).length; var wordB = (b.match(/[\w\u4e00-\u9fff]+/g) || []).length; var out = la + ': ' + a.length + ' 字符 / ' + wordA + ' 词\n' + lb + ': ' + b.length + ' 字符 / ' + wordB + ' 词\n\n' + '相似度(字符级):\n' + ' Levenshtein 距离: ' + lev + '\n' + ' 字符级相似度: ' + simLev.toFixed(2) + '%\n\n' + '相似度(词集):\n' + ' Jaccard 相似度: ' + simJac.toFixed(2) + '%\n\n' + '公共子串(LCS):\n' + ' 长度: ' + lcsStr.length + ' 字符\n' + ' 内容: ' + (lcsStr.length > 200 ? lcsStr.substring(0, 200) + '...' : lcsStr) + '\n\n' + '行级 diff:\n' + lineDiff(a, b); showResult(out, la + ' vs ' + lb + ', 字符相似度 ' + simLev.toFixed(1) + '%'); } $('btn-main').addEventListener('click', function(e) { e.preventDefault(); compare(); }); $('btn-clear').addEventListener('click', function() { var inputs = document.querySelectorAll('input,textarea,select'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].tagName === 'SELECT') inputs[i].selectedIndex = 0; else inputs[i].value = inputs[i].defaultValue; } var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; }); })();