function parseData(raw) {
raw = raw.split("\n");
let resolution = +raw.splice(0,2)[0];
raw = raw.map(s => s.split(","));
let similars = {};
let connections = [];
let i = 2;
while (!isNaN(parseFloat(raw[0][i]))) {
i++;
}
let numParams = i-1;
console.log(numParams);
raw.forEach(a => {
let icon = a[0];
if (!similars[icon]) similars[icon] = [];
for (let i=1; i<a.length-4; i+=numParams) {
let r = {
icon: a[i],
icon2: icon,
exclusive: +a[i+1],
common: +a[i+2],
inkRatio: +a[i+3],
maxDiff: +a[i+4],
};
r.similarityExclusive = r.common / (r.common + r.exclusive);
r.similarityMaxDiff = 1 - r.maxDiff / (resolution ** 2);
r.similarityMaxDiffToCommon = r.common / (r.common + r.maxDiff);
r.similarityComposite = r.similarityExclusive * r.similarityMaxDiff;
if (numParams > 5) {
r.erodedMaxDiff = +a[i+5];
r.similarityMaxErodedDiff = 1 - r.erodedMaxDiff / (resolution ** 2);
r.similarityMaxErodedDiffToCommon = r.common / (r.common + r.erodedMaxDiff);
}
else {
}
r.exclusiveArea = r.exclusive / (resolution ** 2);
similars[icon].push(r);
connections.push(r);
let r2 = Object.assign({},r,{icon: icon});
if (!similars[r.icon]) similars[r.icon] = [];
similars[r.icon].push(r2);
}
});
function rank(attributeName) {
let simName = "similarity"+attributeName;
let rankName = "rank"+attributeName;
connections.sort((a,b) => b[simName] - a[simName]);
connections.forEach((c, idx) => c[rankName] = idx+1);
}
rank("Exclusive");
rank("MaxDiff");
rank("MaxDiffToCommon");
rank("Composite");
rank("MaxErodedDiff");
rank("MaxErodedDiffToCommon");
return {
resolution: resolution,
similars: similars,
connections: connections
}
}