事件知识图谱项目整理
一个事件知识图谱项目的复现。希望达到的效果是选择应用场景,如时政、经济等,从开放域获取包含事件的原始文本预料,选择合适的开源项目,对原始文本进行事件抽取和事件关系抽取,形成三元组,将三元组数据处理后加载到Nro4j数据库进行存储,并通过图数据库查询语音进行查询。
事件知识图谱常用命令
一、PyCharm连接MongoDB
(一)MongoDB
1、启动MongoDB
- win+R cmd
- 首先使用 mongod --dbpath E:\MongoDB\bin
(mongod.exe的存放路径)启动 - win+R cmd(再开一个)
- mongo
2、向 MongoDB Compass 导入json文件
- 注意:导入文件时务必注意空值问题(不要选择 ignore 选项)
(二)PyCharm连接MongoDB
'''基于给定语料与模板的事件抽取,假定你选择的是Mongodb数据库'''
class TextMining:
def __init__(self):
mongo_host = 'localhost' # '127.0.0.1' 你数据库的ip
mongo_port = 27017 # 你数据库端口 原来是28017
mongo_db = 'news' # 数据库名称
mongo_col = 'news' # 数据表名称
username = urllib.parse.quote_plus("root") # 用户名
password = urllib.parse.quote_plus("12345678") # 密码
client = pymongo.MongoClient('mongodb://{}:{}@{}:{}'.format(username, password, mongo_host, mongo_port))
self.db = client[mongo_db]
self.col = self.db[mongo_col]
self.extractor = EventsExtraction()
``
导出的文件在event_extract中
二、Pycharm 连接 Neo4j(Community)
(一)Neo4j Desktop
1、csv文件导入
- 将event_extract中导出的文件改成 csv 格式
注意:CSV 格式文件必须利用记事本转换为 UTF-8 的编码格式再导入Neo4j中,否则会出现中文乱码现象
注意:若第一次导入出现乱码,第二次导入可以改换结点的命名,否则会多次重复导入,即多次结果存在在一张图中 - 语句:LOAD CSV WITH HEADERS FROM “file:///event_extract.csv” AS line
CREATE (:Event_extract {_id:line._id,sent:line.sent, post_part:line.post_part,post_wd:line.post_wd,pre_part:line.pre_part,pre_wd:line.pre_wd,type:line.type})
注意:对文件格式进行修改,避免出现过多后缀 .XX.XX
注意:文件导入的位置,根据提示将.csv文件导入对应的 import 文件夹下导入成功后可以看到有一些结点啦
2、 Neo4j的语法及相应操作
https://www.w3cschool.cn/neo4j/neo4j_need_for_graph_databses.html
(二)Neo4j Community
1、启动Neo4j Community
- win+R cmd
- 首先cd E:\neo4j-community-5.3.0\bin
- 键入neo4j console
出现图片所示的提示即为成功
注意: - Neo4j 的用户名一般不允许修改,都为 neo4j ,但密码必须牢记,否则在连接时很容易出问题。密码修改参考文章 https://blog.csdn.net/weixin_42560812
- Neo4j 与 Pycharm 的连接中 jdk 的版本对应是非常重要的,否则在运行时会报错,出现提示,只要去安装对应的版本 jdk 版本并配置环境变量即可(我的是 jdk 17)且安装完需要重启
2、登录网页端
http://localhost:7474/browser/
(三)Pycharm 连接 Neo4j(Community)
1、配置 Pycharm 环境
在 Pycharm 中导入 py2neo 的安装包,版本选最新版即可。
2、进行连接尝试
参考项目:https://blog.csdn.net/RHJlife/article/details/108586578?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167425999916800213051757%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=167425999916800213051757&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-108586578-null-null.142v71one_line,201v4add_ask&utm_term=%E7%BA%A2%E6%A5%BC%E6%A2%A6%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1&spm=1018.2226.3001.4187
import csv
import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher
#账号密码改为自己的即可
g=Graph('http://localhost:7474',user='neo4j',password='这里写自己的密码',name='neo4j')
with open('C:/Users/dell/Desktop/data.csv','r',encoding='utf-8') as f:
reader=csv.reader(f)
for item in reader:
if reader.line_num==1:
continue
print("当前行数:",reader.line_num,"当前内容:",item)
start_node=Node("Person",name=item[4])
end_node=Node("Person",name=item[2])
relation=Relationship(start_node,item[5],end_node)
g.merge(start_node,"Person","name")
g.merge(end_node,"Person","name")
g.merge(relation,"Person","name")
#以下为neo4j代码,如需代码运行,请放入g.run(...)内运行,将...替换为下列代码
# MATCH (p: Person {name:"贾宝玉"})-[k:丫鬟]-(r)
# return p,k,r
# MATCH (p1:Person {name:"贾宝玉"}),(p2:Person{name:"香菱"}),p=shortestpath((p1)-[*..10]-(p2))
# RETURN p
# 删除所有结点以及关系
# g.delete_all()
这是目前得到的效果

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)