基于电影知识图谱的智能问答系统(一) -- Mysql数据准备

一、MySql数据说明


(1)数据库:movie





(2)genre:电影类别表





(3)movie:电影基本信息表






(4)movie_to_genre:电影与类别的对应关系 【电影id == 类别id】





(5)person:演员基本信息表





(6)person_to_movie:演员与电影对应的关系【演员id == 电影id】





二、MySql数据脚本语句


数据sql脚本下面提供了两种下载方式,如果你使用的mysql客户端可视化连接工具是:MySql WorkBench


可以使用如下的方式导入sql脚本数据




(1)脚本数据部分截图效果





(2)CSDN积分下载链接地址:https://download.csdn.net/download/appleyk/10417081


(3)百度网盘下载链接地址:https://pan.baidu.com/s/1f0ytkiN7jkwcpbbOzId71Q




三、MySql数据导出CSV文件


前两步假如你顺利的话,就来到了这一步,如果没成功,请查找原因,理论上错误是不存在的,因为博主已经反复使用好几次了

由于要基于知识图谱进行问答系统的搭建,因此,我们需要把mysql中的数据转移到neo4j图形数据库中,为什么不直接用mysql构建我们的关系呢?


(1)首先我们简单说一下什么是Neo4j?


Neo4j是一个NoSQL的图数据库管理系统,它存储的结构和redis、mongodb一样,都是key-value的形式,因此查询性能是非常棒的,同样是查询电影和电影类别之间的关系,mysql需要用到select连接查询,而neo4j只需要一条cypher语句既能搞定,


(2)什么是cypher呢?

Neo4j使用Cypher查询图形数据,Cypher是描述性的图形查询语言,语法简单,功能强大,由于Neo4j在图形数据库家族中处于绝对的领先地位,拥有众多的用户基数,使得Cypher成为图形查询语言事实上的标准。


(3)为什么不使用MySql数据库呢?

上面第一点已经说过了,不是mysql干不了neo4j的工作,而是neo4j在处理节点(对象)关系这方面性能比较棒,而且查询语句简单,更容易构建我们的电影知识图谱,我们也可以将二者结合起来用,比如,mysql存储对象的详细信息,而对象之间的关系,我们可以存储到neo4j中,二者配合起来使用也是很不错的,而本系列文章中,博主采用neo4j来构建项目,mysql除了一开始提供数据以外,真的是被我完全给晾到一边了,大笑


好了,我们来看一下,电影类别和电影之间的关系在neo4j图形数据中的效果展示吧






(4)mysql数据导出csv


由于mysql导出数据的默认目录是:安装路径\Uploads\,因此,我们导出csv的时候,一定要在这个目录下指定导出文件名,否则会提示权限不足,如果你有强迫症,可以自行修改mysql的配置文件改这个路径


导出sql脚本语句如下:


use movie;

#CMD命令 查看MySql的导入与导出的目录【其他目录无权限】
# 使用mysql -u root -p  连接mysql
# show variables like '%secure%'
#+--------------------------+------------------------------------------------+
#| Variable_name            | Value                                          |
#+--------------------------+------------------------------------------------+
#| require_secure_transport | OFF                                            |
#| secure_auth              | ON                                             |
#| secure_file_priv         | C:\ProgramData\MySQL\MySQL Server 5.7\Uploads\ |genregenre
#+--------------------------+------------------------------------------------+
#3 rows in set, 1 warning (0.00 sec)

#MySql导出csv数据,带表头


#导出电影的类型
SELECT * INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/genre.csv'
FIELDS TERMINATED BY ',' 
FROM (select 'gid','gname' union select*from genre) genre_;



#导出电影的信息  == 如果太多可以只导出前500个,加限制
SELECT *  INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/movie.csv'
FIELDS TERMINATED BY ','   
OPTIONALLY ENCLOSED BY '"'   
LINES TERMINATED BY '\r'  #电影描述中出现\r换行字符,
FROM (select 'mid','title','introduction','rating','releasedate' union select*from movie) movie_;



#导出演员person的信息 == 如果有中文名要中文名,如果没有取英文名
SELECT *  INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/person.csv'
FIELDS TERMINATED BY ','   
OPTIONALLY ENCLOSED BY '"'   
FROM (select 'pid','birth','death','name','biography','birthplace' union 
select person_id,person_birth_day,person_death_day,case  when person_name is null then person_english_name else person_name  end 
  as name,person_biography,person_birth_place from person) person_;

#导出电影ID和电影类别之间的对应 【1对1】
SELECT *  INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/movie_to_genre.csv'
FIELDS TERMINATED BY ','   
OPTIONALLY ENCLOSED BY '"'   
FROM (select 'mid','gid' union select*from movie_to_genre) movie_to_genre_;


#导出演员ID和电影ID之间的对应 【1对多】
SELECT *   INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/person_to_movie.csv'
FIELDS TERMINATED BY ','   
OPTIONALLY ENCLOSED BY '"'   
FROM (select 'pid','mid' union select*from person_to_movie) person_to_movie_;


#解决导出csv中文乱码问题:将csv用txt打开,另存为,选择utf8编码保存覆盖即可


执行sql脚本语句后,效果如下









(5)导出的csv文件中文乱码


如果出现csv文件中中文乱码的情况,不要慌,我们可以采用下面的方法进行补救


1、选择问题csv文件,右键打开方式选 "记事本"

2、记事本打开后,选择菜单"文件"下拉框中的另存为

3、打开另存为对话框后,最下面的文件编码格式选择"UTF-8"

4、文件名不用动,然后选择保存,覆盖源文件即可解决中文乱码问题




至此,我们的数据csv文件算是有了,下一步就是,如何将这些csv文件导入到我们的图形数据库Neo4j中了




  • 44
    点赞
  • 279
    收藏
    觉得还不错? 一键收藏
  • 37
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值