Files
dic/findSimilarString.js

52 lines
1.6 KiB
JavaScript
Raw Normal View History

const xpath = require("xpath");
const { DOMParser } = require("xmldom");
const stringSimilarity = require("string-similarity");
/**
* XML 문서에서 유사한 문자열 찾기
* @param {string} xmlDoc - XML 문자열
* @param {string} targetString - 비교할 문자열
* @param {number} threshold - 유사도 기준 (0~1)
* @returns {string} - 유사한 문자열
*/
function findSimilarString(xmlDoc, targetString, threshold = 0.8) {
// XML 내부의 비교 대상 텍스트 리스트 찾기
function getTextNodes(xmlDoc, paths = ["//CRCUnitArr/@Name"]) {
const stringList = [];
paths.forEach(path => {
const nodes = xpath.select(path, xmlDoc);
nodes.forEach(node => {
stringList.push(node.value);
});
});
return stringList;
}
// XML에서 모든 텍스트 추출
const stringList = getTextNodes(xmlDoc, [
"//CRCUnitArr/@Name",
"//Layer/Name/@value",
]);
// 유사도 비교하여 가장 유사한 문자열 찾기
let bestMatch = null;
let highestSimilarity = 0;
stringList.forEach(text => {
const similarity = stringSimilarity.compareTwoStrings(targetString, text);
// console.log("🚀 ~ findSimilarString ~ text:", text)
// console.log("🚀 ~ findSimilarString ~ targetString:", targetString)
// console.log("🚀 ~ findSimilarString ~ similarity:", similarity)
if (similarity > highestSimilarity && similarity >= threshold) {
highestSimilarity = similarity;
bestMatch = text;
}
});
return bestMatch;
}
module.exports = findSimilarString;