Neo4j 图数据库 + NLP (自然语言处理) Demo

1. 背景

最近需要使用图数据库做项目

2. Neo4j图数据库

刚开始使用的是Neo4j的Desktop版本,后来再使用APOC插件的时候一直执行失败所以就换成社区版本的server了

官网下载:neo4j

选择社区版本win平台

 下载解压:可以参考这篇博客

3. APOCjar包

当安装好Neo4j之后将jar放到安装位置的plugins文件夹下,要下载对应的版本

具体可以参考这篇博客

4. 百度云NLP应用

创建一个百度账号,登录百度智能云,找到自然语言处理算法,新建一个应用

具体可以参考这篇博客

5. 访问百度NLP

 首先需要向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key;(参见第2部分)
client_secret: 必须参数,应用的Secret Key(参见第2部分)。
      例如:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=??????&client_secret=???????

       在返回的JSON数据中可以看到access_token,例如:

      "access_token":"24.1170ea9dfdfe1edbce3830b78e92b4a0.2592000.1592653389.282335-19996420",

登录neo4j,执行以下代码

// 初始化文本内容数组
WITH ["Neo4j是全球领先的图数据库软件", "Neo4j于2007年在瑞典创建"] AS sentences
UNWIND sentences AS sentence
// 使用百度云NLP对句子进行分词,然后创建句子和词的关系图谱
CALL apoc.load.jsonParams(
'https://aip.baidubce.com/rpc/2.0/nlp/v1/lexer?charset=UTF-8&access_token=24.132c698c046a56f84c1b7c6052e4fda6.2592000.1628746214.282335-24538935', {},
'{"text": "'+sentence + '"}', null, {}) YIELD value
WITH value
CREATE (s:Sentence{text:value.text})
WITH value, s, value.items AS items
UNWIND items AS item
// 过滤掉助词如'的'
WITH s, item WHERE item.pos <> 'u'
MERGE (a:Word{word:item.item})
  SET a.pos = item.pos, a.byte_offset = item.byte_offset, a.ne = item.ne, a.formal = item.formal, a.uri = item.uri
CREATE (s) <-[:IN_SENTENCE]- (a)
RETURN a

再执行以下代码


MATCH (s:Sentence)
WITH s
CALL apoc.load.jsonParams('https://aip.baidubce.com/rpc/2.0/nlp/v1/depparser?charset=UTF-8&access_token=24.132c698c046a56f84c1b7c6052e4fda6.2592000.1628746214.282335-24538935', {},
'{"text": "'+ s.text +'","mode":1}', null, {}) YIELD value
WITH s, value, value.items AS items
UNWIND items AS item
// 更新词的属性。
// 这里过滤掉助词如'的'。注意这里返回结果中代表词性的属性名是postag。
WITH s, item WHERE item.postag <> 'u'
MATCH (a:Word{word:item.word})
  SET a.id = item.id, a.head = item.head, a.deprel = item.deprel
WITH s  
// 根据分析结果创建词之间的依存关系
MATCH (s) <-[:IN_SENTENCE]- (w)  
WITH s,w WHERE w.head <> 0
MATCH (s) <-[:IN_SENTENCE]- (w1)
WHERE w.head = w1.id
MERGE (w) -[:DEPENDS_ON{type:w.deprel}]-> (w1)
RETURN w

6. 参考

本篇博客主要参考了从文本到知识:Neo4j 图数据库 + NLP (自然语言处理) 实现案例

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值