@antv/narrative-text-schema
Version:
Json schema of narrative text visualization
117 lines • 12.5 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
var utils_1 = require("../utils");
/**
* use structure and variables to generate narrative text spec
*/
function generateTextSpec(_a) {
var structures = _a.structures, _b = _a.structureTemps, structureTemps = _b === void 0 ? [] : _b, _c = _a.variables, variables = _c === void 0 ? [] : _c;
var variableMap = (0, utils_1.arr2map)(variables, 'variableId');
var structureTempMap = (0, utils_1.arr2map)(structureTemps, 'templateId');
var splitReg = /(&{.*?})/;
var varReg = /&{(.*?)}/;
// generate paragraphs by structure
var paragraphs = [];
structures.forEach(function (structure, structureIdx) {
var template = structure.template;
var _a = structure.displayType, displayType = _a === void 0 ? structureIdx === 0 ? 'paragraph' : 'phrase' : _a;
// "System &{s1}, includes &{s2}." => ["System ", "&{s1}", ", includes ", "&{s2}", "."]
var templateStrArr = template.split(splitReg).filter(function (str) { return str; });
templateStrArr.forEach(function (templateStr, structureTempIdx) {
var _a;
var templateId = (_a = varReg.exec(templateStr)) === null || _a === void 0 ? void 0 : _a[1];
if (structureTempIdx > 0)
displayType = 'phrase';
if (templateId && structureTempMap[templateId]) {
var structureTemp = structureTempMap[templateId];
var subTemplate = structureTemp.template, variableId = structureTemp.variableId, separator_1 = structureTemp.separator, _b = structureTemp.displayType, subDisplayType = _b === void 0 ? 'phrase' : _b;
var variable = variableId && variableMap[variableId];
var sentences_1 = getSentences(subTemplate, variable === null || variable === void 0 ? void 0 : variable.dataValue, variable === null || variable === void 0 ? void 0 : variable.dataMetaMap);
if (subDisplayType === 'paragraph') {
paragraphs = __spreadArray(__spreadArray([], paragraphs, true), sentences_1.map(function (sentence, sentenceIdx) {
var phrases = __spreadArray([], sentence, true);
if (separator_1 && sentenceIdx < sentences_1.length - 1) {
phrases.push({ type: 'text', value: separator_1 });
}
return {
type: 'normal',
phrases: phrases,
};
}), true);
}
else if (subDisplayType === 'phrase') {
if (!paragraphs.length)
paragraphs.push({ type: 'normal', phrases: [] });
var latestParagraph = paragraphs[paragraphs.length - 1];
latestParagraph.phrases = __spreadArray(__spreadArray([], latestParagraph.phrases, true), sentences_1.reduce(function (prev, curr, sentenceIdx) {
var phrases = __spreadArray(__spreadArray([], prev, true), curr, true);
if (separator_1 && sentenceIdx < sentences_1.length - 1) {
phrases.push({ type: 'text', value: separator_1 });
}
return phrases;
}, []), true);
}
}
else {
var currPhrase = { type: 'text', value: templateStr };
if (displayType === 'paragraph') {
paragraphs.push({ type: 'normal', phrases: [currPhrase] });
}
else if (displayType === 'phrase') {
if (!paragraphs.length)
paragraphs.push({ type: 'normal', phrases: [] });
var latestParagraph = paragraphs[paragraphs.length - 1];
latestParagraph.phrases.push(currPhrase);
}
}
});
});
return {
// single section represent
// 当前构造可以只通过一个 section 表示
sections: [{ paragraphs: paragraphs }],
};
}
function getSentences(template, dataValue, dataMetaMap) {
var splitReg = /(\${.*?})/;
var varReg = /\${(.*?)}/;
var METRIC_NAME_SUFFIX = '[metric_name]';
// "user ${name}, age is ${age}" => ["user ", "${name}", ", age is ", "${age}"]
var templateStrArr = template.split(splitReg).filter(function (str) { return str; });
// {} => [{}]
var formattedDataValue = Array.isArray(dataValue) ? dataValue : [dataValue || {}];
return formattedDataValue.map(function (datum) {
return templateStrArr.map(function (str) {
var _a, _b;
var varName = (_a = varReg.exec(str)) === null || _a === void 0 ? void 0 : _a[1]; // age
if (varName) {
if (varName.endsWith(METRIC_NAME_SUFFIX)) {
var fieldId = varName.slice(0, -METRIC_NAME_SUFFIX.length);
return {
type: 'entity',
value: ((_b = dataMetaMap === null || dataMetaMap === void 0 ? void 0 : dataMetaMap[fieldId]) === null || _b === void 0 ? void 0 : _b.name) || fieldId,
metadata: { entityType: 'metric_name' },
};
}
var data = (0, utils_1.isUndefined)(datum[varName]) ? '-' : "".concat(datum[varName]);
var dataMeta = dataMetaMap === null || dataMetaMap === void 0 ? void 0 : dataMetaMap[varName];
if (dataMeta === null || dataMeta === void 0 ? void 0 : dataMeta.entityType) {
return { type: 'entity', value: data, metadata: { entityType: dataMeta === null || dataMeta === void 0 ? void 0 : dataMeta.entityType } };
}
return { type: 'text', value: data };
}
return { type: 'text', value: str };
});
});
}
exports.default = generateTextSpec;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVUZXh0U3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZS9nZW5lcmF0ZVRleHRTcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsa0NBQWdEO0FBSWhEOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxFQVF6QjtRQVBDLFVBQVUsZ0JBQUEsRUFDVixzQkFBbUIsRUFBbkIsY0FBYyxtQkFBRyxFQUFFLEtBQUEsRUFDbkIsaUJBQWMsRUFBZCxTQUFTLG1CQUFHLEVBQUUsS0FBQTtJQU1kLElBQU0sV0FBVyxHQUFHLElBQUEsZUFBTyxFQUFXLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMvRCxJQUFNLGdCQUFnQixHQUFHLElBQUEsZUFBTyxFQUFnQixjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDOUUsSUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzVCLElBQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUUxQixtQ0FBbUM7SUFDbkMsSUFBSSxVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUVyQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQUMsU0FBUyxFQUFFLFlBQVk7UUFDakMsSUFBQSxRQUFRLEdBQUssU0FBUyxTQUFkLENBQWU7UUFDekIsSUFBQSxLQUE4RCxTQUFTLFlBQWQsRUFBekQsV0FBVyxtQkFBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBQSxDQUFlO1FBQzlFLHVGQUF1RjtRQUN2RixJQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsRUFBSCxDQUFHLENBQUMsQ0FBQztRQUVyRSxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQUMsV0FBVyxFQUFFLGdCQUFnQjs7WUFDbkQsSUFBTSxVQUFV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