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, stringList = []) { const stringNodes = xpath.select("//CRCUnitArr/@Name", xmlDoc); stringNodes.forEach(stringNode => { stringList.push(stringNode.value); }); return stringList; } // XML에서 모든 텍스트 추출 const stringList = getTextNodes(xmlDoc); // 유사도 비교하여 가장 유사한 문자열 찾기 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;