带有 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 为 intentDropdownselect 元素来显示意图。 您有一个 ID 为 entitiesDropdownselect 元素来显示实体。 您正在使用 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 代码将创建一个下拉选项,如下所示:&lt;option value="chinese"&gt;cuisine&lt;/option&gt;

如果您想显示其他项目,您可以创建另一个循环并继续将项目添加到下拉列表中。

【讨论】:

非常感谢。

以上是关于带有 json 和 python 的依赖下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

在 python 中使用 panda 库和 Dash Plotly 创建带有标签和值的下拉菜单

Angular5:使用模板变量的依赖下拉列表

Django的依赖链下拉选择列表 - 不工作

如何根据其他下拉选择将本地 Json 加载到 Flutter DropDown?

django & ajax 依赖的 html 选择列表(级联下拉列表)

如何使用 json 原始数据在 vuejs 中制作依赖的第二个列表?