Попытка создать сборку AI-бота с входным значением
"Search google for London Bridge"
выводит как
"Search <START:engine> google <END> for <START:query> London Bridge <END>"
Проблема в том, что эти XML-теги не могут перекрывать друг друга, могут быть расширены до нескольких слов, в приведенном выше примере используются отдельные слова в скобках движка, но в запросе мы можем использовать скобки из нескольких слов.
пример кода позволяет мне выбирать слова, но обработка перекрывающихся скобок - нет.
var getAllBetween = function (firstEl, lastEl) {
var firstElement = $(firstEl); // First Element
var lastElement = $(lastEl); // Last Element
var collection = new Array(); // Collection of Elements
collection.push(firstElement.attr('id')); // Add First Element to Collection
$(firstEl).nextAll().each(function () { // Traverse all siblings
var siblingID = $(this).attr('id'); // Get Sibling ID
if (siblingID !== $(lastElement).attr('id')) { // If Sib is not LastElement
collection.push($(this).attr('id')); // Add Sibling to Collection
} else { // Else, if Sib is LastElement
collection.push(lastElement.attr('id')); // Add Last Element to Collection
return false; // Break Loop
}
});
return collection; // Return Collection
};
$("#editable").mouseup(function () {
if (window.getSelection) {
userSelection = window.getSelection();
rangeObject = userSelection.getRangeAt(0);
if (rangeObject.startContainer === rangeObject.endContainer) {
alert(rangeObject.startContainer.parentNode.id);
} else {
alert(getAllBetween(
rangeObject.startContainer.parentNode,
rangeObject.endContainer.parentNode));
}
}
});
с помощью бритвы:
@for (int i = 0; i < sentences.Length; i++)
{
var phrase = sentences[i].Split(' ');
<p id="editable">
@for (int p = 0; p < phrase.Length; p++)
{
<span id="phrase-@i-@p">@phrase[p]</span>
}
</p>
}
Не уверен, стоит ли его переписывать в Angularjs или VueJs, чтобы создать больше динамики как Luis.ai или DialogFlow