在前面两个章节,给大家讲解了豆瓣电影数据的爬取,和Neo4j的Cpyher语法。从这节课开始,终于可以正式进入电影知识问答这个项目了。

首先,我们需要把爬取到的数据,导入到Neo4j数据库中。现在的json数据是,一部电影一行的形式存储的,接下来,就需要分别把实体和关系解析出来,才能导入到Neo4j中。

解析目标格式

entity_data = {
    'MOVIE': [{'name': '霸王别姬', '评分': 9.6 ...}, {'name': '阿甘正传', '评分': 9.5} ...]
    'PERSON': [{'name': '张国荣'}, {'name': '周星驰'}, ...]
}

relation_data = {
    '主演': [('霸王别姬', '张国荣'), ('家有喜事', '周星驰'), ('家有喜事', '张国荣') ...],
    '导演': [('霸王别姬': '陈凯歌'), ...]
    '编剧': [('功夫': '周星驰'), ...]
}

代码示例

1、新建配置文件

#config.py
import os
BASE_PATH = os.path.dirname(__file__)
RAW_DATA_PATH =os.path.join(BASE_PATH, './data/douban_top250_movies.json')

2、创建图谱构建类

# build_graph.py
import json

class BuildGraph():
    def __init__(self):
        # 解析json数据
        self.parse_raw_data()

    def parse_raw_data(self):
        with open(RAW_DATA_PATH, encoding='utf-8') as file:
            lines = file.readlines()
        # 逐行解析
        for line in lines:
            movie = json.loads(line)
            movie_name = movie['name']

if __name__ == '__main__':
    bg = BuildGraph()

后面的解析过程,还是比较复杂的,节奏稍慢一点,后面数据组装的过程,放到下节课再介绍。

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/602