学习教程
neo4j
- Neo4j是一个世界领先的开源图形数据库,由 Java 编写。图形数据库也就意味着它的数据并非保存在表或集合中,而是保存为节点以及节点之间的关系。
- neo4j的数据由下面几部分组成:
- 节点、边、属性
- 顶点(node)和边(relationship)和属性,无论是顶点还是边,都可以有任意多的属性。属性的存放类似于一个 HashMap,Key 为一个字符串,而 Value 必须是基本类型或者是基本类型数组
- Neo4J中节点和边 都能够包含保存至的属性,此外:
- 可以为节点设置零或多个标签
- 每个关系都对应一种类型。
- 关系总是从一个节点指向另一个节点。
neo4j简介
- Neo4j 的特点和优势
- SQL就像简单的查询语言语句Neo4j CQL
- 它遵循属性图数据模型
- 它通过使用Apache Lucence支持索引
- 它支持UNIQUE约束
- 它它包含一个用于执行CQL命令的UI:Neo4j数据浏览器
- 它支持完整的ACID(原子性,一致性,隔离性和持久性)规则
- 它采用原生图形库与本地GPE(图形处理引擎)
- 它支持查询的数据导出到JSON和XLS格式
- 它提供了REST API,可以被任何编程语言(如Java,Spring,Scala等)访问
- 它提供了可以通过任何UI MVC框架(如Node JS)访问的Java脚本
- 它支持两种Java API:Cypher API和Native Java API来开发Java应用程序
Neo4j优点
- 它很容易表示连接的数据
- 检索/遍历/导航更多的连接数据是非常容易和快速的
- 它非常容易地表示半结构化数据
- Neo4j CQL查询语言命令是人性化的可读格式,非常容易学习
- 它使用简单而强大的数据模型
- 它不需要复杂的连接来检索连接的/相关的数据,因为它很容易检索它的相邻节点或关系细节没有连接或索引
Neo4j install
- 官网直接下载安装包安装即可,链接:https://neo4j.com/download/。
- 注意环境变量的更新
- 访问地址:http://localhost:7474
- 修改数据库的文件名称:${NEO4J_HOME}/conf 文件夹
- Neo4j数据构建模块
- 节点、属性、关系、标签、数据浏览器
- 节点:是图的基本单位,它包含具有键值对的属性
- 属性:用于描述节点和关系的键值对
- 关系:是图形数据库的另一个国建模块,链接两个节点。
- 导出的格式:CSV和json
- CQL:是Neo4j的查询语言。具体的用法可以参考:https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html
py2neo
- Py2Neo 是用来对接 Neo4j 的 Python 库。
- install
pip install py2neo
Node & relationship
# -*- coding:utf-8 -*-
# /usr/bin/python
'''
@Author : Yan Errol
@Describe:
@Evn :
@Date : 2019-08-02 13:59
'''from py2neo import Node, Relationship,walk,Grapha = Node('Person', name='Alice')
b = Node('Person', name='Bob')
c = Node('Person', name='Mike')
ab = Relationship(a, "KNOWS", b)
ac = Relationship(a, "KNOWS", c)
w = ab + Relationship(b, "LIKES", c) + ac
for item in walk(w):
print(item)a = Node('Person', name='Alice')
b = Node('Person', name='Bob')
r = Relationship(a, 'KNOWS', b)
s = a | b | r
# 存储数据库
graph = Graph(password='yel219')
graph.create(w)# 查询语句
node = graph.match(nodes='Person')
print(node)
relationship = graph.match_one(r_type='KNOWS')
print(relationship)# update data
# a = Node('Person',name='Alice')
# node = graph.match_one(nodes='Person',r_type='KNOWS')
# node['age']=100
# graph.push(node)
# print(graph.match_one(nodes = 'Person',r_type='KNOWS'))# delete node
node = graph.match_one(nodes='Person')
relationship = graph.match_one(r_type='KNOWS')
graph.delete(relationship)
graph.delete(node)
哈工大LTP
- LTP(Language Technology Platform)中文为语言技术平台,是哈工大社会计算与信息检索研究中心开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library,DLL)的应用程序接口,可视化工具,并且能够以网络服务的形式进行使用。
- 开发文档
- 语言云LTP-Cloud
- 模型下载地址
- 在线NLP分析系统
下载模型
百度云
https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2F
七牛云
http://ltp.ai/download.html
# -*- coding: utf-8 -*-
from
pyltp
import
SentenceSplitter
from
pyltp
import
Segmentor
from
pyltp
import
Postagger
from
pyltp
import
NamedEntityRecognizer
ldir='AgriKG\\ltp\\cws.model'#分词模型
dicdir='word'#外部字典
text = "贵州财经大学要举办大数据比赛吗?"
#中文分词
segmentor = Segmentor() #初始化实例
segmentor.load_with_lexicon(ldir,
'word'
)
#加载模型
words = segmentor.segment(text) #分词
print(text)
print(
' '
.join(words))
#分词拼接
words = list(words) #转换list
print(
u"分词:"
, words)
segmentor.release() #释放模型
#词性标注
pdir='AgriKG\\ltp\\pos.model'
pos = Postagger() #初始化实例
pos.load(pdir) #加载模型
postags = pos.postag(words) #词性标注
postags = list(postags)
print(
u"词性:"
, postags)
pos.release() #释放模型
data = {
"words"
: words,
"tags"
: postags}
print(data)
数据存储方式
- 知识图谱由数据和信息组成,还包含大量不同数据之间的链接
- 三元组的概念:主语、宾语和谓语(或实体-属性-值)
- 数据存储方式:节点(node)和边(edge)
- cypher查询语言
- match:相当于sql的select用来查询匹配的数据模式;
- where:用来限制node或者关系部分的属性值,从而返回我们想要的属性值
- return:返回节点或者关系