带有 json 和 python 的依赖下拉列表
Posted
技术标签:
【中文标题】带有 json 和 python 的依赖下拉列表【英文标题】:dependent dropdownlist with json and python 【发布时间】:2018-01-12 13:25:11 【问题描述】:所以我在 django 框架中为我的聊天机器人制作了一个对话框面板。对话面板由意图和实体下拉列表以及对话文本区域组成。下拉列表将取决于我的 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": []
]
【问题讨论】:
我投了反对票,因为你的问题格式很糟糕。缺少连词,句子之间缺少空格,缺少段落以及用小写字母“i”提及自己,这让你的问题,至少对我来说,非常难以阅读。您发布的示例代码太长且多余。请解决您的问题 - 如果您希望有人帮助您解决问题,这是您至少可以做的。 好的。我在一定程度上改进了格式 【参考方案1】:基本上,您所要做的就是遍历common_examples
中的项目并检查intent
是否与下拉列表中的选定值匹配。如果是,请将entities
添加到实体下拉列表中。
由于您没有提供太多关于您的 html 的信息,我将尝试用一些假设来回答:
-
您有一个 ID 为
intentDropdown
的 select
元素来显示意图。
您有一个 ID 为 entitiesDropdown
的 select
元素来显示实体。
您正在使用 jQuery。
代码包含一些 cmets 来解释它的作用。
<!-- 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>
。
如果您想显示其他项目,您可以创建另一个循环并继续将项目添加到下拉列表中。
【讨论】:
非常感谢。以上是关于带有 json 和 python 的依赖下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中使用 panda 库和 Dash Plotly 创建带有标签和值的下拉菜单
如何根据其他下拉选择将本地 Json 加载到 Flutter DropDown?