吴京个人资料

考研2022-08-24 14:09:57佚名

通过【电影知识图谱问答(一)|爬取豆瓣影片与书籍详尽信息、电影知识图谱问答(二)|生成298万条RDF三元组数据、电影知识图谱问答(三)|Jena知识储存及知识检索、电影知识图谱问答(四)|问句理解及答案推理】四篇文章的介绍,我们早已了解怎样从豆瓣官网中爬取数据;怎样将爬取的数据转换得到可用的三元组数据,并储存至Jena之中;怎样借助查询语言进行知识检索和答案推理;怎样理解问句所抒发的深层语义信息,即获取问句实体和目标属性信息;怎样借助问句的深层语义信息,结合规则和表示学习方式,推理得到问题答案。结合前面几篇文章,早已才能从零开始建立一个影片知识图谱问答系统吴京个人资料,有兴趣的朋友可以尝试搭建。本篇文章,将介绍怎样将影片知识图谱问答系统布署至陌陌公众平台,布署完成后才能通过陌陌公众号进行知识问答。

本项目相关代码已然发布至,项目地址为/-KGQA,欢迎Star。1.服务器

将代码布署至陌陌公众平台须要一个服务器,倘若只是用于Demo展示的话,推荐订购腾讯云中学生服务器或则阿里云中学生服务器,价钱非常让利。个人订购的是腾讯云服务器,配置为1核CPU、2G显存、1Mbps带宽、50GB高性能网盘,价钱6个月60元。

订购好服务器以后,须要安装系统环境,个人安装的是.04系统。系统安装成功以后,安装,配置北大源。之后配置陌陌公众号,将服务器和陌陌公众号进行关联。

2.陌陌公众号开发

按照陌陌公众平台开发文档接入手册,将服务器接入至陌陌公众号。陌陌官方文档早已比较详尽,此处不再进行介绍,接入过程中有相关问题直接在文章下方评论即可。右图是个人陌陌公众号配置截图,有兴趣的话,也可以关注下个人陌陌公众号谓之小一。

目前只是将服务器成功接入到陌陌公众号,并且还不能处理用户发送过来的恳求,因而需编撰用户恳求处理方面的代码。处理方式可参考陌陌官方Demo,包括陌陌公众号处理用户恳求的流程,怎么接收消息,怎么发送消息等问题。

熟悉官方Demo以后吴京个人资料,开始编撰豆瓣影片知识图谱(BM-KGQA)对话处理的代码。首先创建.py文件,用于响应用户经陌陌公众号端发送过来的恳求,并返回相应答案。代码如下所示,其中fromQuery是单条问句处理的插口,,reply是定义的陌陌消息接收和返回函数。

# query_server.py
# -*- coding:utf-8 -*-
import web
import hashlib
from query_main import Query
import receive, reply
query = Query()
class Handle(object):
    def __init__(self):
        # 初始化query
        #  self.query = Query()
        pass
    def GET(self):
        try:
            data = web.input()
            if len(data) == 0:
                return "hello, this is handle view"
            signature = data.signature
            timestamp = data.timestamp
            nonce = data.nonce
            echostr = data.echostr
            # 和公众平台官网-->基本配置中信息填写相同
            token = "douban_kgqa"
            list = [token, timestamp, nonce]
            list.sort()
            sha1 = hashlib.sha1()
            map(sha1.update, list)
            hashcode = sha1.hexdigest()
            print("handle/GET func: hashcode, signature: ", hashcode, signature)
            if hashcode == signature:
                return echostr
            else:
                return "I don't Know"
        except Exception as err:
            print('ERROR: ' + str(err))
            return err
    def POST(self):
        try:
            webData = web.data()
            # 后台打印日志
            print('Handle Post webdata is ', webData)
            recMsg = receive.parse_xml(webData)
            if isinstance(recMsg, receive.Msg):
                toUser = recMsg.FromUserName
                fromUser = recMsg.ToUserName
                if recMsg.MsgType == 'text':
                    # result = "彩虹屁屁"
                    question = recMsg.Content
                    result = query.parse(question)
                    replyMsg = reply.TextMsg(toUser, fromUser, result)

吴京个人资料

return replyMsg.send() if recMsg.MsgType == 'image': mediaId = recMsg.MsgId replyMsg = reply.ImageMsg(toUser, fromUser, mediaId) return replyMsg.send() else: return reply.Msg().send() else: print('暂且不处理') return reply.Msg().send() except Exception as err: print('ERROR: ' + str(err)) return err urls = ( '/douban_kgqa', 'Handle' ) if __name__ == '__main__': douban_kgqa_web = web.application(urls, globals()) douban_kgqa_web.run()

.py是接收用户经陌陌公众号发送过来的恳求,解析后获取问句详尽信息。

# receive.py
# -*- coding:utf-8 -*-
import xml.etree.ElementTree as ET
def parse_xml(web_data):
    if len(web_data) == 0:
        return None
    xmlData = ET.fromstring(web_data)
    msg_type = xmlData.find('MsgType').text
    if msg_type == 'text':
        return TextMsg(xmlData)
    elif msg_type == 'image':
        return ImageMsg(xmlData)
class Msg(object):
    def __init__(self, xmlData):
        self.ToUserName = xmlData.find('ToUserName').text
        self.FromUserName = xmlData.find('FromUserName').text
        self.CreateTime = xmlData.find('CreateTime').text
        self.MsgType = xmlData.find('MsgType').text
        self.MsgId = xmlData.find('MsgId').text
        self.Content = xmlData.find('Content').text
class TextMsg(Msg):
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.Content = xmlData.find('Content').text.encode("utf-8")
class ImageMsg(Msg):
    def __init__(self, xmlData):
        Msg.__init__(self, xmlData)
        self.PicUrl = xmlData.find('PicUrl').text
        self.MediaId = xmlData.find('MediaId').text

reply.py是将须要返回的答案封装成陌陌要求的数据类型。

# reply
# -*- coding:utf-8 -*-
import time

吴京个人资料

class Msg(object): def __init__(self): pass def send(self): return "success" class TextMsg(Msg): def __init__(self, toUserName, fromUserName, content): self.__dict = dict() self.__dict['ToUserName'] = toUserName self.__dict['FromUserName'] = fromUserName self.__dict['CreateTime'] = int(time.time()) self.__dict['Content'] = content def send(self): XmlForm = """ {ToUserName}]]> {FromUserName}]]> {CreateTime} {Content}]]> """ return XmlForm.format(**self.__dict) class ImageMsg(Msg): def __init__(self, toUserName, fromUserName, mediaId): self.__dict = dict() self.__dict['ToUserName'] = toUserName self.__dict['FromUserName'] = fromUserName self.__dict['CreateTime'] = int(time.time()) self.__dict['MediaId'] = mediaId def send(self): XmlForm = """ {ToUserName}]]> {FromUserName}]]> {CreateTime} {MediaId}]]> """ return XmlForm.format(**self.__dict)

代码编撰完成以后,将所有代码移到服务器端,安装项目所须要的依赖包,最后借助.py80开启服务。开启成功以后,便就能借助陌陌公众号进行问答。

3.陌陌问答Demo

通过前面的配置,早已才能通过陌陌公众号处理影片,书籍方面的问题,下边来看看书籍-影片知识图谱问答系统(BM-KGQA)的最终疗效,右图为BM-KGQA才能处理的问句类型。

针对影片类信息,可提问其执导、导演、编剧、海报、上映地区、上映时间、时长、其他名子、简介、详细信息、评分、评分人数等内容。例如提问“流浪月球的出演是谁?”、“流浪月球的播出时间是哪些时侯?”、“流浪月球的评分是多少?”、“流浪月球的详尽信息是哪些”等。需要注意的是,针对问句“流浪月球的评分是多少?”,因“流浪月球”既有书籍也有影片,所以返回两种答案,并对其进行标明分辨。

针对影片人物类信息,可提问其相片、性别、星座、生日、出生地、职业、其他名子、详细信息、介绍等内容。例如提问“吴京的生日是哪些时侯?”、“吴京的出生地是在哪里?”、“吴京的职业是哪些?”、“吴京的天秤是哪些?”、“吴京个人的详尽信息和我说一下”、“吴京执导了什么影片”、“吴京指导了什么影片”等。

针对书籍类信息,可提问其图片、出版社、出版日期、页数、目录、简介、评分、评价人数、详细信息等内容。例如提问“《追风筝的人》的出版社是哪里?”、“《追风筝的人》的出版日期是哪些时侯?”、“《追风筝的人》总共多少页?”、“《追风筝的人》的作者是谁呢”、“《追风筝的人》的详尽信息?”。

针对书籍类人物信息,可提问其图片、性别、生日、出生地、其他名称、介绍、详细信息等内容。例如提问“杨绛的图片内容?”、“杨绛写作了什么书?”、“杨绛的出生地是哪里?”、“杨绛的其他名子称作哪些?”、“杨绛的详尽信息和我说一下?”。

以上,便是书籍-影片知识图谱智能问答系统(BM-KGQA)的最终疗效,还能通过陌陌公众号来精确回答用户关于书籍-影片方面的问题。其实,目前该知识图谱问答系统仅才能处理书籍,影片领域的问题,处理过程也须要依赖大量规则模版,功能还不是很健全。但通过此项目,就能给初学者提供一个解决问题的完整流程,即怎样借助知识图谱来进行特定领域知识问答。后续,将继续进行构建,包括但不限于将特定领域内知识问答推广至百科类知识问答;建立端到端的问句理解模块,直接从中抽取出问句三元组;才能提供复杂问句理解和复杂答案推理功能。

相关推荐

猜你喜欢

大家正在看

换一换