in packages/Ludown/lib/parseFileContents.js [1268:1311]
const VerifyAndUpdateSimpleEntityCollection = function (parsedContent, entityName, entityType) {
let entityRoles = [];
// Find this entity if it exists in the simple entity collection
let simpleEntityExists = (parsedContent.LUISJsonStructure.entities || []).find(item => item.name == entityName);
if (simpleEntityExists !== undefined) {
// take and add any roles into the roles list
(simpleEntityExists.roles || []).forEach(role => !entityRoles.includes(role) ? entityRoles.push(role) : undefined);
// remove this simple entity definition
// Fix for #1137.
// Current behavior does not allow for simple and phrase list entities to have the same name.
if (entityType != 'Phrase List') {
for (var idx = 0; idx < parsedContent.LUISJsonStructure.entities.length; idx++) {
if (parsedContent.LUISJsonStructure.entities[idx].name === simpleEntityExists.name) {
parsedContent.LUISJsonStructure.entities.splice(idx, 1);
}
}
}
}
// Find if this entity is referred in a labelled utterance
let entityExistsInUtteranceLabel = (parsedContent.LUISJsonStructure.utterances || []).find(item => {
let entityMatch = (item.entities || []).find(entity => entity.entity == entityName)
if (entityMatch !== undefined) return true;
return false;
});
if (entityExistsInUtteranceLabel !== undefined) {
let entityMatch = entityExistsInUtteranceLabel.entities.filter(item => item.entity == entityName);
entityMatch.forEach(entity => {
if (entity.role !== undefined) {
if (!entityRoles.includes(entity.role)) {
entityRoles.push(entity.role);
}
} else if (entityType !== 'Phrase List') { // Fix for # 1151. Phrase lists can have same name as other entities.
let errorMsg = `'${entityType}' entity: "${entityName}" is added as a labelled entity in utterance "${entityExistsInUtteranceLabel.text}". ${entityType} cannot be added with explicit labelled values in utterances.`
let error = BuildDiagnostic({
message: errorMsg
});
throw (new exception(retCode.errorCode.INVALID_INPUT, error.toString()));
}
});
}
return entityRoles;
}