Files
dic/findSimilarString.js

41 lines
1.4 KiB
JavaScript

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 => {
console.log("🚀 ~ getTextNodes ~ stringNode:", stringNode.value);
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);
if (similarity > highestSimilarity && similarity >= threshold) {
highestSimilarity = similarity;
bestMatch = text;
}
});
return bestMatch;
}
module.exports = findSimilarString;