#gStore-weekly | gAnswer的使用

gAnswer能够将自然语言问题转化成包含语义信息的查询图,然后,将查询图转化成标准的SPARQL查询,并将这些查询在图数据库中执行,最终得到用户的答案。这篇文章将介绍gAnswer的使用。

目前gAnswer仅仅提供了HTTP API,以JSON格式接受用户自然语言问题,同时以JSON格式返回生成的SPARQL查询和问题答案。首先介绍gAnswerHttp启动,然后是http API以及数据传输格式。

1、gAnswerHttp

gAnswerHttp是利用jetty开发的,嵌入式的,轻量级的gAnswer http server。在控制台/终端启动gAnswerHttp以后,可以通过http请求获取系统生成的问题sparql和问题答案。 启动的方法是:切换到工程文件夹下,控制台输入

java -jar Ganswer.jar

默认为9999端口。若想使用其他端口,例如8888,可以输入

java –jar Ganswer.jar port=8888

2、http API说明
2.1、简单样式

在本部分,会给出一个使用gAnswerHttp API的例子。 正常启动gAnswerHttp后,用户需要构建一个json格式的数据,例如:

{
 “maxAnswerNum”: “3”
 “needSparql”: “2”
 “question”: “Who is the wife of Barack Obama?”
}

上述json数据的含义为:回答”Who is the wife of Barack Obama?”这个问题,要求最多返回3个不同的答案,1条生成的SPARQL查询。 将此json数据转化为字符串,进行url转码,然后使用ip:port/gSolve/?data=%json string%
(在%json string%处放入json数据字符串)这一uri来调用gAnswer系统。在样例中,实际访问的uri为:http://ip:port/gSolve/?data={maxAnswerNum:3, maxSparqlNum:1,question:Who is the wife of Ming Yao?}
若省略maxAnswerNum和maxSparqlNum则系统使用默认参数。假如系统返回了正确结果,返回的内容也是json格式的数据,如下所示:(注意,使用浏览器直接访问时,应在源代码页面查看返回结果,避免出现显示错误)

{
 “status”: “200”
 “query”: “Who is the wife of Barack Obama?”
 “vars” : [ “?wife” ]
 “sparql”: [
 “select DISTINCT ?wife where { ?wife <spouse> <Yao_Ming>. } LIMIT 3”
 ]
 “results”:{
  “bindings” : [
  {
   “?wife” :
   {
    “type” : “uri”
    “value”:”<Ye_Li>”
   }
  },
  ]
 },
}

需要特别说明的是,其中“vars”代表识别到的变量名,“results”中为实际得到的答案,”value”中为实际答案的值,“status”则说明这是一次正常的请求返回。假如系统中出现了错误,那么同样会返回json格式的数据,而不会报错。如下:

{
 “query”: “”,
 “message”: “UnvalidQuestionException: the question you input is invalid, please check”,
 “status”: “500”
}

这是输入了无效问题(长度过短)以后,返回的json数据,其中“message”提供了出错的详细信息,“status”说明了错误的代码。

2.2、API 结构

gSolve

uri : ip:port/gSolve/

作用:向gAnswer请求返回一个或多个用户问题的答案和sparql,用户可以选择返回答案还是sparql

输入:

{
 “maxAnswerNum”: //一个整数,代表需要返回的答案的上限
 “needSparql”: //一个整数,代表需要返回sparql的数量
 “questions”: //用户问题
}

输出

{
 “status”: //表示用户请求的状态
 “query”: //用户问题
 “vars” : [ …… ] //查询中涉及的变量
 “sparql”: [ …… ] //由用户问题得到的sparql查询
 “results”:{
  “bindings” : [ //多个json对象,每个对象为一组变量的值绑定
  {
   “%varName%” : { //此处的key为上面“vars”中出现的变量的名字
   “type” : //说明这个值的类型,比如uri
   “value”://答案的值
   }
  }
 ]
 },
 //当maxAnswerNum大于0,会返回得到的答案
}

getInfouri:ip:port/getInfo/
作用:获取当前gAnswer系统的状态以及相关元数据 输入:不需要额外的参数 输出

{
 “version”: //当前的系统版本
 “dataset”: //当前使用的数据集
 “GDB system”: //当前使用的gStore版本
}

2.3、Java API示例

我们在源代码的application.gAnswerHttpConnector中给出了使用Java通过http请求访问gAnswer系统的示例。

public String gSolve(String data){
    String param = data;
    String rst = sendGet(param,"/gSolve");
    System.out.println(rst);
    return rst;
}

public String gInfo(){
    String param = "";
    String rst = sendGet(param,"/gInfo");
    System.out.println(rst);
    return rst;
}

3、demo展示

gAnswer在DBpedia2016,bird,film三个数据集的demo演示可以公开访问:https://answer.gstore.cn/pc/index.html

我们的系统能轻松实现这种三跳的问题解析以及数据库查询:

系统还对中间数据细节可视化展示,包含对问题解析后的解析树,查询图,“vars”识别到的变量名。以及生成的 sparql 查询语句。


有任何问题可添加以下二维码联系我们的运营同学。

诚邀大家参加

·gStore-weekly技术文章征集活动·

  相关技术文章,包含但不限于以下内容:系统技术解析、案例分享、实践总结、开发心得、客户案例、使用技巧、学习笔记等。文章要求原创。

  入选周刊即送精美礼品~

欢迎关注北京大学王选计算机研究所数据管理实验室微信公众号“图谱学苑“
实验室官网:https://mod.wict.pku.edu.cn/
微信社区群:请回复“社区”获取

实验室开源产品图数据库gStore:
gStore官网:https://www.gstore.cn/
GitHub:https://github.com/pkumod/gStore
Gitee:https://gitee.com/PKUMOD/gStore

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值