|
3 | 3 | * Licensed under the MIT License. |
4 | 4 | */ |
5 | 5 |
|
6 | | -const helpers = require('../utils/helpers') |
7 | 6 | const fileExtEnum = require('../utils/helpers').FileExtTypeEnum |
8 | 7 | const luParser = require('../lufile/luParser') |
9 | 8 | const SectionOperator = require('../lufile/sectionOperator') |
@@ -38,18 +37,17 @@ module.exports = { |
38 | 37 |
|
39 | 38 | const crossTrainConfig = fileHelper.getConfigObject( |
40 | 39 | configObject, |
41 | | - options.configId, |
42 | 40 | options.intentName || '_Interruption', |
43 | 41 | options.verbose || true) |
44 | 42 |
|
45 | 43 | let {luObjectArray, qnaObjectArray} = pretreatment(luContents, qnaContents) |
46 | 44 | const {rootIds, triggerRules, intentName, verbose} = crossTrainConfig |
47 | 45 |
|
48 | 46 | // parse lu content to LUResource object |
49 | | - let {fileIdToResourceMap: luFileIdToResourceMap, allEmpty: allLuEmpty} = await parseAndValidateContent(luObjectArray, verbose, importResolver) |
| 47 | + let {fileIdToResourceMap: luFileIdToResourceMap, allEmpty: allLuEmpty} = await parseAndValidateContent(luObjectArray, verbose, importResolver, fileExtEnum.LUFile) |
50 | 48 |
|
51 | 49 | // parse qna content to LUResource object |
52 | | - let {fileIdToResourceMap: qnaFileIdToResourceMap, allEmpty: allQnAEmpty} = await parseAndValidateContent(qnaObjectArray, verbose, importResolver) |
| 50 | + let {fileIdToResourceMap: qnaFileIdToResourceMap, allEmpty: allQnAEmpty} = await parseAndValidateContent(qnaObjectArray, verbose, importResolver, fileExtEnum.QnAFile) |
53 | 51 |
|
54 | 52 | if (!allLuEmpty) { |
55 | 53 | // construct resource tree to build the father-children relationship among lu files |
@@ -181,8 +179,7 @@ const mergeRootInterruptionToLeaves = function (rootResource, result, qnaFileToR |
181 | 179 | for (const child of rootResource.children) { |
182 | 180 | let childResource = result.get(child.target) |
183 | 181 | if (childResource && childResource.visited === undefined) { |
184 | | - let rootQnaFileId = rootResource.id.toLowerCase().replace(new RegExp(helpers.FileExtTypeEnum.LUFile + '$'), helpers.FileExtTypeEnum.QnAFile) |
185 | | - rootQnaFileId = Array.from(qnaFileToResourceMap.keys()).find(x => x.toLowerCase() === rootQnaFileId) |
| 182 | + const rootQnaFileId = Array.from(qnaFileToResourceMap.keys()).find(x => x.toLowerCase() === rootResource.id.toLowerCase()) |
186 | 183 | const rootQnaResource = qnaFileToResourceMap.get(rootQnaFileId) |
187 | 184 | const newChildResource = mergeFatherInterruptionToChild(rootResource, rootQnaResource, childResource, intentName) |
188 | 185 | result.set(child.target, newChildResource) |
@@ -356,12 +353,11 @@ const extractIntentUtterances = function(resource, intentName) { |
356 | 353 | const qnaCrossTrain = function (qnaFileIdToResourceMap, luFileIdToResourceMap, interruptionIntentName, allLuEmpty) { |
357 | 354 | try { |
358 | 355 | for (const qnaObjectId of Array.from(qnaFileIdToResourceMap.keys())) { |
359 | | - let luObjectId = qnaObjectId.toLowerCase().replace(new RegExp(helpers.FileExtTypeEnum.QnAFile + '$'), helpers.FileExtTypeEnum.LUFile) |
360 | 356 | let fileName = path.basename(qnaObjectId, path.extname(qnaObjectId)) |
361 | 357 | const culture = fileHelper.getCultureFromPath(qnaObjectId) |
362 | 358 | fileName = culture ? fileName.substring(0, fileName.length - culture.length - 1) : fileName |
363 | 359 |
|
364 | | - luObjectId = Array.from(luFileIdToResourceMap.keys()).find(x => x.toLowerCase() === luObjectId) |
| 360 | + const luObjectId = Array.from(luFileIdToResourceMap.keys()).find(x => x.toLowerCase() === qnaObjectId.toLowerCase()) |
365 | 361 | if (luObjectId) { |
366 | 362 | const { luResource, qnaResource } = qnaCrossTrainCore(luFileIdToResourceMap.get(luObjectId), qnaFileIdToResourceMap.get(qnaObjectId), fileName, interruptionIntentName, allLuEmpty) |
367 | 363 | luFileIdToResourceMap.set(luObjectId, luResource) |
@@ -506,16 +502,17 @@ const qnaAddMetaData = function (qnaResource, fileName) { |
506 | 502 | * @param {luObject[]} objectArray the lu or qna object list to be parsed |
507 | 503 | * @param {boolean} verbose indicate to enable log messages or not |
508 | 504 | * @param {any} importResolver import Resolver when resolving import files |
| 505 | + * @param {any} fileExt file extension to indicate the file is .lu or .qna format |
509 | 506 | * @returns {Map<string, LUResource>} map of file id and luResource |
510 | 507 | * @throws {exception} throws errors |
511 | 508 | */ |
512 | | -const parseAndValidateContent = async function (objectArray, verbose, importResolver) { |
| 509 | +const parseAndValidateContent = async function (objectArray, verbose, importResolver, fileExt) { |
513 | 510 | let fileIdToResourceMap = new Map() |
514 | 511 | let allEmpty = true |
515 | 512 | for (const object of objectArray) { |
516 | 513 | let fileContent = object.content |
517 | 514 | if (object.content && object.content !== '') { |
518 | | - if (object.id.toLowerCase().endsWith(fileExtEnum.LUFile)) { |
| 515 | + if (fileExt === fileExtEnum.LUFile) { |
519 | 516 | let result = await LuisBuilderVerbose.build([object], verbose, undefined, importResolver) |
520 | 517 | let luisObj = new Luis(result) |
521 | 518 | fileContent = luisObj.parseToLuContent() |
|
0 commit comments