知识图谱可以用python构建吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识图谱可以用python构建吗?相关的知识,希望对你有一定的参考价值。
参考技术A知识图谱可以用python构建吗?
答案当然是可以的!!!
那么如何使用python构建
什么是知识图谱
从Google搜索,到聊天机器人、金融风控、物联网场景、智能医疗、自适应教育、推荐系统,无一不跟知识图谱相关。它在技术领域的热度也在逐年上升。
互联网的终极形态是万物的互联,而搜索的终极目标是对万物的直接搜索。传统搜索引擎依靠网页之间的超链接实现网页的搜索,而语义搜索是直接对事物进行搜索,如人物、机构、地点等。这些事物可能来自文本、图片、视频、音频、IoT设备等各种信息资源。而知识图谱和语义技术提供了关于这些事物的分类、属性和关系的描述,使得搜索引擎可以直接对事物进行索引和搜索。
知识图谱是由Google公司在2012年提出来的一个新的概念。从学术的角度,我们可以对知识图谱给一个这样的定义:“知识图谱本质上是语义网络(Semantic Network)的知识库”。但这有点抽象,所以换个角度,从实际应用的角度出发其实可以简单地把知识图谱理解成多关系图(Multi-relational Graph)。
那什么叫多关系图呢? 学过数据结构的都应该知道什么是图(Graph)。图是由节点(Vertex)和边(Edge)来构成,但这些图通常只包含一种类型的节点和边。但相反,多关系图一般包含多种类型的节点和多种类型的边。
本项目利用pandas将excel中数据抽取,以三元组形式加载到neo4j数据库中构建相关知识图谱。
运行环境
基于Neo4j能够很容易构建知识图谱,除了用neo4j自带的cypher,也支持Python包py2neo创建节点和关系从而构建知识图谱。本项目是基于发票信息,将发票数据中结构化数据抽象成三元组,分别创建节点和关系从而构建成知识图谱。
具体包依赖可以参考文件requirements.txt
neo4j-driver==1.6.2numpy==1.15.3pandas==0.23.4parso==0.3.1pickleshare==0.7.5pluggy==0.8.0prompt-toolkit==1.0.15py==1.7.0py2neo==3Pygments==2.2.0pytest==3.9.3python-dateutil==2.7.5wcwidth==0.1.7wincertstore==0.2xlrd==1.1.0
将所需依赖安装到pyton中:pip install -r requirements.txt
Pandas抽取excel数据
python中pandas非常适用于数据分析与处理,可以将excel文件转换成dataframe格式,这种格式类似于Spark中的Dataframe结构,可以用类sql的形式对数据进行处理。
Excel数据结构如下
通过函数data_extraction和函数relation_extrantion分别抽取构建知识图谱所需要的节点数据以及联系数据,构建三元组。
数据提取主要采用pandas将excel数据转换成dataframe类型
invoice_neo4j.py
建立知识图谱所需节点和关系数据
DataToNeo4jClass.py
具体代码请移步到GitHub上下载
详细内容请到github下载,项目名neo4j-python-pandas-py2neo-v3
更多Python知识,请关注:Python自学网!!
简单构建基于RDF和SPARQL的KBQA(知识图谱问答系统)
本文主要通过python实例讲解基于RDF和SPARQL的KBQA系统的构建。该项目可在python2和python3上运行通过。
注:KBQA即是我们通常所说的基于知识图谱的问答系统。这里简单构建的EasyKBQA,数据来源于网络,源码地址看下面补充说明。
目录:
-流程原理
-实际过程
-程序运行
-补充说明
该问答系统可以解析输入的自然语言问句,主要运用REFO库的"对象正则表达式"匹配得到结果, 进而生成对应 SPARQL 查询语句,再通过API请求后台基于TDB知识谱图数据库的 Apache Jena Fuseki 服务, 得到结果。
1. 预定义 3 ?类共 5 ?个示例问题,?包括:
● "谁是苑茵?",
● "丁洪奎是谁?",
● "苏进木来自哪里?",
● "苑茵哪个族的?",
● "苑茵是什么民族的人?".
2. 利用结巴分词对中文句子进行分词, ?同时进行词性标注;
3. 将词的文本和词性打包, ?视为"词对象",对应 :class:Word(token,? ?pos)?;
4. 利用 REfO ?模块对词进行对象级别 (object-level) ?的正则匹配,判断问题属于的?种类?并产生对应的 SPARQL,对应 :class:Rule(condition,? ?action)?;
5. 如果成功匹配并成功产生 SPARQL ?查询语句, ?立刻请求 Fuseki ?服务并返回结果,打印相关内容;
1、配置第三方库:pip install refo jieba sparqlwrapper
2、安装JAVA JDK1.8,配置好环境变量。
3、项目根目录主要包括backend??文件夹和test.py文件(同一级),backend是Jena?的Fuseki 模块,?运行第4步后在本地监听(http://localhost:3030/),如图:
4、cd backend/apache-jena-fuseki-3.5.0,windows下启动SPARQL endpoint服务:
fuseki-server.bat --loc=../DB /demo > log.txt 2>&1
对应Linux命令为:
nohup ./fuseki-server --loc=../DB /demo > log.txt 2>&1 &
5、运行根目录代码:python test.py,结果如下图:
1、启动fuseki服务器参数,--loc=../DB设置在线服务数据库位置,参数/demo设置服务器数据集名称(自定义),对应的SPARQL查询地址为:http://localhost:3030/demo/query
2、自然语言问句进行正则匹配的逻辑REfO. ?主要参考根目录下的代码:words.py
3、后续改进可参考: 使用邻接链表表示自然语言问句, 通过遍历有向图或子图匹配方法构造 SPAPQL ?查询语句
代码下载地址:https://download.csdn.net/download/starbaby01/10621927
以上是关于知识图谱可以用python构建吗?的主要内容,如果未能解决你的问题,请参考以下文章
python+neo4j构建基于知识图谱的电影知识智能问答系统