@antv/algorithm
Version:
graph algorithm
66 lines (65 loc) • 2.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _util = require("@antv/util");
var _nodeProperties = require("./utils/node-properties");
var _dataPreprocessing = require("./utils/data-preprocessing");
var _cosineSimilarity = _interopRequireDefault(require("./cosine-similarity"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* nodes-cosine-similarity算法 基于节点属性计算余弦相似度(基于种子节点寻找相似节点)
* @param nodes 图节点数据
* @param seedNode 种子节点
* @param propertyKey 属性的字段名
* @param involvedKeys 参与计算的key集合
* @param uninvolvedKeys 不参与计算的key集合
*/
var nodesCosineSimilarity = function nodesCosineSimilarity(nodes, seedNode, propertyKey, involvedKeys, uninvolvedKeys) {
if (nodes === void 0) {
nodes = [];
}
if (propertyKey === void 0) {
propertyKey = undefined;
}
if (involvedKeys === void 0) {
involvedKeys = [];
}
if (uninvolvedKeys === void 0) {
uninvolvedKeys = [];
}
var similarNodes = (0, _util.clone)(nodes.filter(function (node) {
return node.id !== seedNode.id;
}));
var seedNodeIndex = nodes.findIndex(function (node) {
return node.id === seedNode.id;
});
// 所有节点属性集合
var properties = (0, _nodeProperties.getAllProperties)(nodes, propertyKey);
// 所有节点属性one-hot特征向量集合
var allPropertiesWeight = (0, _dataPreprocessing.oneHot)(properties, involvedKeys, uninvolvedKeys);
// 种子节点属性
var seedNodeProperties = allPropertiesWeight[seedNodeIndex];
var allCosineSimilarity = [];
similarNodes.forEach(function (node, index) {
if (node.id !== seedNode.id) {
// 节点属性
var nodeProperties = allPropertiesWeight[index];
// 计算节点向量和种子节点向量的余弦相似度
var cosineSimilarityValue = (0, _cosineSimilarity.default)(nodeProperties, seedNodeProperties);
allCosineSimilarity.push(cosineSimilarityValue);
node.cosineSimilarity = cosineSimilarityValue;
}
});
// 将返回的节点按照余弦相似度大小排序
similarNodes.sort(function (a, b) {
return b.cosineSimilarity - a.cosineSimilarity;
});
return {
allCosineSimilarity: allCosineSimilarity,
similarNodes: similarNodes
};
};
var _default = nodesCosineSimilarity;
exports.default = _default;