如何在Wit.ai中的一条消息中使用多个实体?

时间:2016-11-18 10:18:16

标签: python nlp wit.ai

我跟着this tutorial使用Wit.ai写了一个simple script

因此,有一个代码片段可以从第一条消息中检索实体:

def first_entity_value(entities, entity):
    if entity not in entities:
        return None
    val = entities[entity][0]['value']
    if not val:
        return None
    return val['value'] if isinstance(val, dict) else val

我有两个问题:

  1. 如何从其他消息中获取实体?那么,当用户输入内容时(不是第一条消息)?
  2. 我在邮件中有多个实体(例如:我要访问伦敦这个周末),我怎样才能获得第二个实体实体(周末)? 现在我尝试编写类似下面的内容但出现错误:

    def first_entity_value(entities, entity):
        if entity not in entities:
            return None
        val = entities[entity][0][1]['value'] # to get the second entity
        if not val:
            return None
        return val['value'] if isinstance(val, dict) else val
    

1 个答案:

答案 0 :(得分:1)

“伦敦”是一个位置,“周末”是日期时间。它们不是同一个实体。

要检索两个实体,只需调整entity参数:

city = first_entity_value(entities, 'location')
date = first_entity_value(entities, 'datetime')

如果您想要检索同一实体的两个值(例如:我喜欢巴黎伦敦),那么您应该使用您尝试过的方法:

def get_entity_value(entities, entity, pos):
    if entity not in entities:
        return None
    val = entities[entity][pos]['value'] # to get the entity at "pos"
    if not val:
        return None
    return val['value'] if isinstance(val, dict) else val

我真的不是第一个问题。每次收到用户的消息时,都会运行所选的操作(来自Wit converse)。