所以我在django框架中为我的聊天机器人制作了一个对话框面板。 “对话框”面板由意图和实体下拉列表以及对话框textarea组成。下拉列表将取决于我的json格式的训练数据。
我想要下拉列表,以便在我选择意图时,实体下拉列表会自动创建并显示与所选意图相关的所有实体。
我已经尝试了,但我能够显示意图下拉,但是它也有重复的意图(我使用python set函数删除了)。但我无法弄清楚如何根据一个特定意图显示所有实体。
帮帮我。这是我的例子json:
{"rasa_nlu_data": {
"common_examples": [
{
"text": "hey",
"intent": "greet",
"entities": []
},
{
"text": "yep",
"intent": "affirm",
"entities": []
},
{
"text": "i'm looking for a place to eat",
"intent": "restaurant_search",
"entities": []
},
{
"text": "i'm looking for a place in the north of town",
"intent": "restaurant_search",
"entities": [
{
"start": 31,
"end": 36,
"value": "north",
"entity": "location"
}
]
},
{
"text": "show me chinese restaurants",
"intent": "restaurant_search",
"entities": [
{
"start": 8,
"end": 15,
"value": "chinese",
"entity": "cuisine"
}
]
},
{
"text": "bye",
"intent": "goodbye",
"entities": []
}
]}}
答案 0 :(得分:0)
基本上,您只需循环common_examples
内的项目,然后检查intent
是否与下拉列表中的所选值匹配。如果是,请将entities
添加到实体下拉列表。
由于您没有提供有关HTML的大量信息,我将尝试回答一些假设:
select
元素,其ID为intentDropdown
以显示意图。select
元素,其ID为entitiesDropdown
,用于显示实体。该代码包含一些注释,以解释它的作用。
<!-- intents dropdown -->
<select id="intentsDrowpdown">
<!-- intent options-->
</select>
<!-- entities dropdown -->
<select id="entitesDrowpdown"></select>
<!-- Javascript -->
<script>
var data = {"rasa_nlu_data": { ... }}; // the json data
var totalExamples = data.rasa_nlu_data.common_examples.length; // total items inside common_examples
// listen to the event when selected value in
// the intent dropdown changes
$("#intentsDropdown").on('change', function() {
$("#entitiesDropdown").empty(); // clear the previously added entities from entities drowpdown
var selectedIntent = this.value; // currently selected intent
// loop over the items in common_examples
for (var i = 0; i < totalExamples; i++) {
var currentExample = data.rasa_nlu_data.common_examples[i] // current example in the loop
// see if the selected intent matches the
// intent of the current example in the loop
if (currentExample.intent == selectedIntent) {
// if intent matches
// loop over the items inside entities
// of the current example
for (var j = 0; j < currentExample.entities.length; j++) {
// add the option in the dropdown
$("#entitiesDropdown").append($('<option>', {
value: currentExample.entities[j].value,
text: currentExample.entities[j].entity
}));
}
}
}
});
</script>
最后,我想提醒你注意一件事。考虑以下示例:
"entities": [
{
"start": 8,
"end": 15,
"value": "chinese",
"entity": "cuisine"
}
entities
列表中有一个项目。该项目中有4个子项目。在您的问题中,您尚未明确是否要在一个下拉选项中显示所有子项(例如start: 8, end: 15, value: chinese, entity: cuisine
),或者您是否希望为每个子项单独选项。
我发布的JS代码将创建一个下拉选项,如下所示:
<option value="chinese">cuisine</option>
。
如果您想显示其他项目,您可以创建另一个循环并继续将项目添加到下拉列表中。