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

Commit 62f691e

Browse files
authored
fix phraselist merging bug (#1133)
1 parent ab2ff4c commit 62f691e

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

packages/lu/src/parser/luis/luisCollate.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,9 +355,12 @@ const buildModelFeatures = function (blob, FinalLUISJSON) {
355355
// error.
356356
throw (new exception(retCode.errorCode.INVALID_INPUT, '[ERROR]: Phrase list : "' + modelFeature.name + '" has conflicting definitions. One marked interchangeable and another not interchangeable'));
357357
} else {
358+
let words = modelFeatureInMaster[0].words.split(',').map(word => word.trim()).filter(word => word !== '');
358359
modelFeature.words.split(',').forEach(function (word) {
359-
if (!modelFeatureInMaster[0].words.includes(word)) modelFeatureInMaster[0].words += "," + word;
360-
})
360+
if (!words.find(w => w === word.trim())) words.push(word.trim());
361+
});
362+
363+
modelFeatureInMaster[0].words = words.join(',');
361364
}
362365
}
363366
});
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@ phraselist LowercaseList(interchangeable) disabledForAllModels
2+
3+
@ ml LowercaseAction usesFeature LowercaseList
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
@ phraselist LowercaseList(interchangeable) disabledForAllModels =
2+
- all lowercase
3+
- down case
4+
- downcase
5+
- lower case
6+
- lower case from
7+
- lower cased
8+
- lowercase
9+
- lowercase from
10+
- lowercase letter
11+
- lowercase letters
12+
- lowercased
13+
- lowercases
14+
- lowercasing
15+
- non capitalized
16+
- uncapitalized

packages/lu/test/parser/luis/luisBuilder.test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,19 @@ assert.isTrue(luisObject.validate())
110110
assert.equal(luisObject.utterances[0].text, 'test 1');
111111
assert.equal(luisObject.utterances[1].text, 'test 2');
112112
});
113+
114+
it('Phraselist can merge correctly when defined in different imported lu files', async () => {
115+
let luFile = `
116+
[Import entity](./test/fixtures/testcases/entities.lu)
117+
[Import phraselist](./test/fixtures/testcases/phraselists2.lu)`;
118+
119+
const luisObject = await LUISBuilder.fromLUAsync(luFile)
120+
121+
assert.equal(luisObject.entities.length, 1);
122+
assert.equal(luisObject.entities[0].name, 'LowercaseAction');
123+
assert.equal(luisObject.entities[0].features[0].featureName, 'LowercaseList');
124+
assert.equal(luisObject.phraselists.length, 1);
125+
assert.equal(luisObject.phraselists[0].name, 'LowercaseList');
126+
assert.equal(luisObject.phraselists[0].words, 'all lowercase,down case,downcase,lower case,lower case from,lower cased,lowercase,lowercase from,lowercase letter,lowercase letters,lowercased,lowercases,lowercasing,non capitalized,uncapitalized');
127+
});
113128
});

0 commit comments

Comments
 (0)