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

Commit b2ce5f5

Browse files
authored
Add escape brackets in utterance capability (#1104)
* add excape brackets capability * fix test
1 parent 82760de commit b2ce5f5

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

packages/lu/src/parser/lufile/visitor.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const lp = require('./generated/LUFileParser').LUFileParser;
22
const LUISObjNameEnum = require('./../utils/enums/luisobjenum');
33
const InvalidCharsInIntentOrEntityName = require('./../utils/enums/invalidchars').InvalidCharsInIntentOrEntityName;
4+
const EscapeCharsInUtterance = require('./../utils/enums/escapechars').EscapeCharsInUtterance;
45

56
class Visitor {
67
/**
@@ -20,6 +21,12 @@ class Visitor {
2021
utterance = this.recurselyResolveTokenizedUtterance(tokUtt, entities, errorMsgs, utterance.trimLeft());
2122
break;
2223
}
24+
case lp.ESCAPE_CHARACTER: {
25+
let escapeCharacters = innerNode.getText();
26+
let escapedUtterace = escapeCharacters.length > 1 && EscapeCharsInUtterance.includes(escapeCharacters[1]) ? escapeCharacters.slice(1) : escapeCharacters;
27+
utterance = utterance.concat(escapedUtterace);
28+
break;
29+
}
2330
default: {
2431
utterance = utterance.concat(innerNode.getText());
2532
break;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License.
4+
*/
5+
// Escape chars in utterance
6+
module.exports = {
7+
EscapeCharsInUtterance: ['{', '}', '\\']
8+
};

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

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1025,7 +1025,7 @@ describe('parseFile correctly parses utterances', function () {
10251025
.then(res => {
10261026
assert.equal(res.LUISJsonStructure.patternAnyEntities.length, 0);
10271027
assert.equal(res.LUISJsonStructure.entities.length, 0);
1028-
assert.equal(res.LUISJsonStructure.utterances[0].text, 'this is a \\{test\\}');
1028+
assert.equal(res.LUISJsonStructure.utterances[0].text, 'this is a {test}');
10291029
assert.equal(res.LUISJsonStructure.utterances[1].text, 'this ia a test \\n');
10301030
done();
10311031
})
@@ -1112,4 +1112,39 @@ describe('parseFile correctly parses utterances', function () {
11121112
})
11131113
.catch(err => done(err))
11141114
})
1115+
1116+
it("Correctly parses utterance with escape char \\ to escape entity definition", function (done) {
1117+
let testLU = `
1118+
# test
1119+
- this is another \\{@from = one} from \\{@to = tokyo} \\in japan`;
1120+
parseFile
1121+
.parseFile(testLU)
1122+
.then((res) => {
1123+
assert.equal(
1124+
res.LUISJsonStructure.utterances[0].text,
1125+
"this is another {@from = one} from {@to = tokyo} \\in japan"
1126+
);
1127+
done();
1128+
})
1129+
.catch((err) => done(err));
1130+
});
1131+
1132+
it("Correctly parses utterance that keeps @ at the the beginning of entity name", function (done) {
1133+
let testLU = `
1134+
# test
1135+
- this is another \\\\{@@from = one} from {@@to = tokyo}`;
1136+
parseFile
1137+
.parseFile(testLU)
1138+
.then((res) => {
1139+
assert.equal(
1140+
res.LUISJsonStructure.utterances[0].text,
1141+
"this is another \\one from tokyo"
1142+
);
1143+
assert.equal(res.LUISJsonStructure.entities.length, 2);
1144+
assert.equal(res.LUISJsonStructure.entities[0].name, "@from");
1145+
assert.equal(res.LUISJsonStructure.entities[1].name, "@to");
1146+
done();
1147+
})
1148+
.catch((err) => done(err));
1149+
});
11151150
})

0 commit comments

Comments
 (0)