Dialogflow es @sys.person-Extract firstname和lastname

Dialogflow es @sys.person-Extract firstname和lastname,dialogflow-es,Dialogflow Es,自2019年4月18日起,已添加@sys.person系统实体: 它返回一个包含给定名称和lastname的Object:name字符串 我想从Object:name字符串中提取给定名称和lastname 我不是在寻找在第一个空格“”处拆分字符串的最简单方法 我正在寻找一些符合复合名称的东西,比如“Bree Van de Kamp” 仅供参考,处理必须在webhook中完成 编辑:用“Bree Van de Kamp”解决问题 现在,如何使用法语复合名称来实现它,例如:“Jean-Yves d

自2019年4月18日起,已添加@sys.person系统实体:

它返回一个包含给定名称和lastname的Object:name字符串

我想从Object:name字符串中提取给定名称和lastname

我不是在寻找在第一个空格“”处拆分字符串的最简单方法

我正在寻找一些符合复合名称的东西,比如“Bree Van de Kamp”

仅供参考,处理必须在webhook中完成

编辑:用“Bree Van de Kamp”解决问题
现在,如何使用法语复合名称来实现它,例如:“Jean-Yves de la Héronière”,其中“Jean-Yves”是给定的名称。

假设您的webhook实现传递了一个对象,
sys.person
,包含
{“name”:“Bree Van de Kamp”}

在本例中,尚未定义给定名称和lastname。您可以通过拆分每个空格字符上的名称字符串来设置值,然后运行for循环来重新组合姓氏,如

let person = { name: "Bree Van de Kamp" };
let split_name = person.name.split(" ");

function splitName(full_name){

  let name = {
    given_name: "",
    last_name: ""
  };

  for(let i = 0; i < full_name.length; i++){
    if (i == 0) {
      name.given_name = full_name[i];
    } else {
      if (i > 1){
        name.last_name = name.last_name + " ";
      }
      name.last_name = name.last_name + full_name[i];
    }
  }

  return name;

}

// returns { given_name: 'Bree', last_name: 'Van de Kamp' }
let person={name:“Bree Van de Kamp”};
让split_name=person.name.split(“”);
函数splitName(全名){
让名称={
给定名称:“”,
姓氏:“
};
for(设i=0;i1){
name.last_name=name.last_name+“”;
}
name.last_name=name.last_name+全名[i];
}
}
返回名称;
}
//返回{given_name:'Bree',last_name:'Van de Kamp'}

您可以在java中测试上述代码块,我这样做:

    LinkedTreeMap person = (LinkedTreeMap) request.getParameter("name");
    String fullname = (String) person.get("name");
    List<String> names = Splitter.on(" ").splitToList(fullname);
    String firstname = names.get(0);
    String lastname = Joiner.on(" ").skipNulls().join(names.stream().skip(1).collect(Collectors.toList()));
LinkedTreeMap person=(LinkedTreeMap)request.getParameter(“name”);
String fullname=(String)person.get(“name”);
列表名称=拆分器.on(“”).splitToList(全名);
String firstname=names.get(0);
String lastname=Joiner.on(“”.skipNulls().join(names.stream().skip(1.collect)(Collectors.toList());

我刚刚找到这项服务:


您可以根据自己的意图编写一些实现代码,并使用NamSor API将@sys.person实体解析为名字和姓氏。它还将尝试从名字中推断出性别,所有这些你都可以有一个后续意图来检查它是否正确。

谢谢你的回答,我就是这么做的。但我的问题仍然存在于法语复合名称中,例如:“Jean-Yves de la Héronière”,其中“Jean-Yves”是名字。我找到的唯一解决办法是让用户写“Jean-Yves”,但不能用语音。在这种情况下,单独询问姓名和姓氏可能更容易。你是否解决过这个@clément Beaujoin问题?是的,我分别询问姓名和姓氏,但这需要调用API并为namsor的专业计划花钱。无论如何,让我们知道你的使用结果