Skip to content
This repository was archived by the owner on Jan 15, 2025. It is now read-only.

Commit 08c2b50

Browse files
authored
Merge pull request #148 from microsoft/vishwac/multi-utterance-feature
luis:convert - add support for multiple definitions for the same utterance
2 parents 1335b0d + e200357 commit 08c2b50

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

packages/luis/parser/lufile/parseFileContents.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,8 @@ const parseAndHandleIntent = function (parsedContent, luResource) {
364364
});
365365

366366
// add utterance
367-
let utteranceObject = new helperClass.uttereances(utterance, intentName, []);
367+
let utteranceExists = parsedContent.LUISJsonStructure.utterances.find(item => item.text == utterance && item.intent == intentName);
368+
let utteranceObject = utteranceExists || new helperClass.uttereances(utterance, intentName, []);
368369
entitiesFound.forEach(item => {
369370
if (item.startPos > item.endPos) {
370371
let errorMsg = `No labelled value found for entity: "${item.entity}" in utterance: "${utteranceAndEntities.context.getText()}"`;
@@ -382,7 +383,7 @@ const parseAndHandleIntent = function (parsedContent, luResource) {
382383
}
383384
utteranceObject.entities.push(utteranceEntity)
384385
});
385-
parsedContent.LUISJsonStructure.utterances.push(utteranceObject);
386+
if (utteranceExists === undefined) parsedContent.LUISJsonStructure.utterances.push(utteranceObject);
386387
}
387388

388389
} else {
@@ -391,8 +392,10 @@ const parseAndHandleIntent = function (parsedContent, luResource) {
391392
let patternObject = new helperClass.pattern(utterance, intentName);
392393
parsedContent.LUISJsonStructure.patterns.push(patternObject);
393394
} else {
394-
let utteranceObject = new helperClass.uttereances(utterance, intentName, []);
395-
parsedContent.LUISJsonStructure.utterances.push(utteranceObject);
395+
if(parsedContent.LUISJsonStructure.utterances.find(item => item.text == utterance && item.intent == intentName) === undefined) {
396+
let utteranceObject = new helperClass.uttereances(utterance, intentName, []);
397+
parsedContent.LUISJsonStructure.utterances.push(utteranceObject);
398+
}
396399
}
397400
}
398401
}

packages/luis/test/parser/lufile/parseFileContents.parseFile.test.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -980,7 +980,24 @@ describe('parseFile correctly parses utterances', function () {
980980
assert.equal(res.LUISJsonStructure.patterns[0].pattern, '[[this]is] a new form (a | b)');
981981
done();
982982
})
983-
.catch(err => done('Fail! Did not throw when expected'))
983+
.catch(err => done('Fail!'))
984+
});
985+
986+
it ('Multiple utterance sections with individual label definitions are handled correctly', function(done) {
987+
let testLU = `# test
988+
- one {protein = cheese} sandwich
989+
- one cheese sandwich
990+
- tomato orange
991+
- one cheese {foodType = sandwich}
992+
`;
993+
994+
parseFile.parseFile(testLU)
995+
.then(res => {
996+
assert.equal(res.LUISJsonStructure.utterances.length, 2);
997+
assert.equal(res.LUISJsonStructure.utterances[0].entities.length, 2);
998+
done();
999+
})
1000+
.catch(err => done('Fail!'))
9841001
})
9851002

9861003
it ('patterns are handled correctly', function(done){

0 commit comments

Comments
 (0)