如何在Watson的会话API中获取用户输入的日期?

时间:2016-08-07 01:46:21

标签: ibm-cloud ibm-watson watson-dialog watson-conversation

是否有人已经知道如何获取用户在Watson的Conversation API中输入的日期? 在Dialog API中,我们可以使用标准实体,如DATE_TIME_RANGE和FROM_DATE,但我找不到任何方式不自行结束添加新的自定义实体。 我想在Dialog API上创建这样的验证:

<input>
<grammar>
    <item>$ (IATA)={var-from} * (IATA)={var-to} * (DATE_TIME_RANGE)={var-date1} * (DATE_TIME_RANGE)={var-date2}</item>
    <item>$ (IATA)={var-from} * (IATA)={var-to} * (DATE_TIME_RANGE)={var-date1} * (DATE_TIME_RANGE)={var-date2} *</item>
    <item>(IATA)={var-from} * (IATA)={var-to} * (DATE_TIME_RANGE)={var-date1} * (DATE_TIME_RANGE)={var-date2} *</item>
    <item>(IATA)={var-from} * (IATA)={var-to} * (DATE_TIME_RANGE)={var-date1} * (DATE_TIME_RANGE)={var-date2}</item>
</grammar>  
<output id="itinerario">
    <action varName="var-from" operator="SET_TO">{var-from.value:main}</action>
    <action varName="var-to" operator="SET_TO">{var-to.value:main}</action>
    <action varName="var-date1" operator="SET_TO">{var-date1.value:FROM_DATE}</action>
    <action varName="var-date2" operator="SET_TO">{var-date2.value:FROM_DATE}</action>
    <prompt>
        <item>{var-from} {var-to} {var-date1} {var-date2}</item>
    </prompt>
</outputt>

2 个答案:

答案 0 :(得分:2)

Conversation API还没有该功能。在短期内,一种解决方法可能是使用正则表达式在客户端应用程序中提取日期,并将它们作为上下文变量传递给API。

答案 1 :(得分:2)

您可以使用条件通过

访问特殊节点
input.text.matches( '[0-9]+' )

(添加你想要的任何正则表达式) http://www.ibm.com/watson/developercloud/doc/conversation/expression-language.html

提取要提取值的节点中的值。在上下文变量中添加类似

的内容
"context": {
    "number_extract": "<? input.text.extract('[\\d]+',0) ?>"
}

(你可以在提取中加入你想要的任何正则表达式)

这是您目前与沃森谈话所能做的最好的事情。所以你必须制作自己的正则表达式来解析日期。

我个人使用另一个解决方案,即在watson之前制作一个自定义解析器。 这个人详细介绍了如何使用alchemyAPI

https://kozhayasite.wordpress.com/2016/08/27/watson-conversation-with-alchemy-entity-extraction/