Python+neo4j构建豆瓣电影知识图谱

文章目录

        • 数据来源
        • 数据整理导入
        • 节点和关系导入
          • 使用Subgraph批量导入节点和关系
        • 多标签实体和实体去重

数据来源

http://www.openkg.cn/dataset/douban-movie-kg

在这里插入图片描述
该网址拥有丰富的中文知识图谱数据集,OpenKG(Open Knowledge Graph),可供研究人员使用研究。

数据整理导入

在这里插入图片描述

python">import json 

with open('douban.json','r',encoding='utf-8') as f:
    res = json.load(f)
    for r in res:
        print(r)
python">{'id': 25746375, 'title': '我是路人甲', 'url': 'http://movie.douban.com/subject/25746375/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2252471054.jpg', 'rate': 7.4, 'director': ['尔冬升'], 'composer': ['尔冬升'], 'actor': ['万国鹏', '王婷', '沈凯', '徐小琴', '林晨', '魏星', '蒿怡帆', '蒿怡菲', '覃培军', '王昭', '张文斌', '林俭', '耿立树', '张喜来', '周鹏', '寇骏', '姜涛', '袁咏仪', '方中信', '刘伟强', '冯德伦', '吴彦祖', '尔冬升', '麦兆辉', '庄文强', '方平', '张静初', '许鞍华', '林更新', '蒋梦婕', '陆剑明'], 'category': ['剧情', '喜剧'], 'district': ['China_中国大陆'], 'language': ['汉语普通话', '粤语', '浙江方言'], 'showtime': 2015.0, 'length': 134.0, 'othername': ['I Am Somebody']}
{'id': 5446197, 'title': '铁拳', 'url': 'http://movie.douban.com/subject/5446197/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2239723542.jpg', 'rate': 7.1, 'director': ['安东尼·福奎阿'], 'composer': ['科特·萨特'], 'actor': ['杰克·吉伦哈尔', '福里斯特·惠特克', '瑞秋·麦克亚当斯', '娜奥米·哈里斯', '50分', '乌娜·劳伦斯', '米格尔·戈麦斯', '瑞塔·奥拉', '维克托·奥尔蒂斯', '克莱尔·弗利', '博·纳普', '约翰·塞纳迭姆博'], 'category': ['剧情', '动作', '运动'], 'district': ['United States of America_美国', 'China_中国大陆'], 'language': ['英语'], 'showtime': 2015.0, 'length': 123.0, 'othername': ['左撇子', '震撼擂台(台)', '再战击情(港)']}
{'id': 25885212, 'title': '我们梦中见', 'url': 'http://movie.douban.com/subject/25885212/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2264068617.jpg', 'rate': 7.6, 'director': ['布雷特·海利'], 'composer': ['Marc Basch', '布雷特·海利'], 'actor': ['布莱思·丹纳', '马丁·斯塔尔', '琼·斯奎布', '雷亚·普尔曼', '玛丽·凯·普莱斯', '玛琳·阿克曼', '山姆·艾里奥特', '瑞德·斯科特', '麦克斯·盖尔', '马克·阿戴尔-里奥斯', '阿什利·斯皮尔斯', '阿尔蒂·曼', '卡罗琳-拉格菲尔特'], 'category': ['剧情', '喜剧'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2015.0, 'length': 92.0, 'othername': None}
{'id': 25728581, 'title': '少年透明人', 'url': 'http://movie.douban.com/subject/25728581/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2212138459.jpg', 'rate': 6.6, 'director': ['加布里埃尔·萨瓦特瑞斯'], 'composer': None, 'actor': ['卢多维科·吉拉尔德罗', 'Ludovico Girardello', '瓦莱莉·高利诺'], 'category': ['奇幻', '冒险'], 'district': ['Italy_意大利'], 'language': ['意大利语'], 'showtime': 2014.0, 'length': 100.0, 'othername': ['The Invisible Boy']}
{'id': 5156558, 'title': '撒迦利亚', 'url': 'http://movie.douban.com/subject/5156558/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2265577230.jpg', 'rate': 6.0, 'director': ['克雷格·卓贝'], 'composer': ["Robert C. O'Brien", 'Nissar Modi'], 'actor': ['玛格特·罗比', '克里斯·派恩', '切瓦特·埃加福特'], 'category': ['剧情', '科幻', '惊悚'], 'district': ['United States of America_美国', 'Iceland_冰岛'], 'language': ['英语'], 'showtime': 2015.0, 'length': 95.0, 'othername': None}
{'id': 24325815, 'title': '非我', 'url': 'http://movie.douban.com/subject/24325815/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2251424605.jpg', 'rate': 6.3, 'director': ['塔西姆·辛'], 'composer': ['大卫·帕斯特尔', '亚历克斯·帕斯特尔'], 'actor': ['瑞恩·雷诺兹', '本·金斯利', '马修·古迪', '娜塔丽·马丁内兹', '米歇尔·道克瑞', '德里克·卢克', '维克多·加博', '玛丽安娜·宝拉·韦森特', '山姆·佩吉', '特瑞·韦伯', '格里夫·弗斯特', '艾米莉·特里梅因', '加里·维克斯'], 'category': ['科幻', '悬疑', '惊悚'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2015.0, 'length': 117.0, 'othername': ['换命法则(台)', '换命游戏', '无我', 'Selfless']}
{'id': 25922902, 'title': '唇上之歌', 'url': 'http://movie.douban.com/subject/25922902/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2207639509.jpg', 'rate': 7.5, 'director': ['三木孝浩'], 'composer': ['持地佑季子', '登米裕一', '中田永一', '乙一'], 'actor': ['新垣结衣', '木村文乃', '桐谷健太', '恒松祐里', '下田翔大', '葵若菜', '柴田杏花', '山口麻友', '佐野勇斗', '室井響', '渡边大知', '真岛秀和', '石田光', '木村多江', '小木茂光', '角替和枝', '井川比佐志'], 'category': ['剧情'], 'district': ['Japan_日本'], 'language': ['日语'], 'showtime': 2015.0, 'length': 132.0, 'othername': ['再会吧 ! 青春小鸟(台)', 'Have a Song on Your Lips']}
{'id': 25738406, 'title': '如晴天,似雨天', 'url': 'http://movie.douban.com/subject/25738406/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2225420926.jpg', 'rate': 8.1, 'director': ['弗兰克·威利'], 'composer': ['弗兰克·威利'], 'actor': ['朱利安·夏特金', '莉顿·梅斯特', '黛博拉·梅辛', '欧嘉·梅雷迪斯', '韦恩·普雷特洛', '乔治娅·希梅内斯·里弗谢', '阿尔弗雷多·纳西索', '比利·乔·阿姆斯特朗', '萨布丽娜·马查多', '达茜·福勒', 'Heather Whaley', 'Sammy Pignalosa', 'Frank Shattuck', 'Tamara Torres', 'Buster Whaley'], 'category': ['剧情', '音乐'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2014.0, 'length': 104.0, 'othername': ['像星期日,像下雨']}
{'id': 25767747, 'title': '故事的故事', 'url': 'http://movie.douban.com/subject/25767747/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2264871852.jpg', 'rate': 7.4, 'director': ['马提欧·加洛尼'], 'composer': ['Giambattista Basile', '马提欧·加洛尼', 'Edoardo Albinati', 'Ugo Chiti', 'Massimo Gaudioso'], 'actor': ['萨尔玛·海耶克', '文森特·卡索', '约翰·C·赖利', '托比·琼斯', '雪莉·亨德森', '斯塔西·马汀', '阿尔芭·洛尔瓦彻', '卡特里内尔·马龙', 'Hayley Carmichael', '碧碧·凯芙', 'Christian Lees', 'Jonah Lees', 'Guillaume Delaunay', 'Kathryn Hunter', 'Jessie Cave'], 'category': ['历史', '奇幻'], 'district': ['Italy_意大利', 'France_法国', 'United Kingdom_英国'], 'language': ['英语', '意大利语'], 'showtime': 2015.0, 'length': 125.0, 'othername': ['异色童话集(台)', '故事中的故事', 'The Tale of Tales']}
{'id': 25823840, 'title': '奸臣', 'url': 'http://movie.douban.com/subject/25823840/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2235239810.jpg', 'rate': 6.3, 'director': ['闵奎东'], 'composer': ['闵奎东'], 'actor': ['朱智勋', '金康宇', '林智妍', '千浩振', '李宥英'], 'category': ['剧情', '情色', '古装'], 'district': ['South Korea_韩国'], 'language': ['韩语'], 'showtime': 2015.0, 'length': 133.0, 'othername': ['The Treacherous']}
{'id': 10533913, 'title': '头脑特工队', 'url': 'http://movie.douban.com/subject/10533913/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2266293606.jpg', 'rate': 9.0, 'director': ['彼特·道格特 ', ' 罗纳尔多·德尔·卡门'], 'composer': ['彼特·道格特', '罗纳尔多·德尔·卡门', '梅格·勒福夫', '乔什·库雷', '迈克尔·阿恩特', '西蒙·里奇', '鲍勃·彼德森', '比尔·哈德尔', '艾米·波勒'], 'actor': ['艾米·波勒', '菲利丝·史密斯', '理查德·坎德', '比尔·哈德尔', '刘易斯·布莱克', '敏迪·卡灵', '凯特林·迪亚斯', '戴安·琳恩', '凯尔·麦克拉克伦', '波拉·庞德斯通', '鲍比·莫伊尼汉', '保拉·佩尔', '大卫·戈尔兹', '弗兰克·奥兹', '乔什·库雷', '弗利', '约翰·拉岑贝格', '卡洛斯·阿拉斯拉奇', '皮特·萨加尔', '拉什达·琼斯', '罗里·艾伦', '约翰·齐甘', '雪莉·琳恩', '拉瑞恩·纽曼', '帕丽斯·冯·戴克'], 'category': ['喜剧', '动画', '冒险'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2015.0, 'length': 94.0, 'othername': ['玩转脑朋友(港)', '脑筋急转弯(台)', '头脑大作战', '大脑环游记', '脑中小小人', '大脑内外', '由内而外', '头脑总动员']}
{'id': 25814707, 'title': '小森林 冬春篇', 'url': 'http://movie.douban.com/subject/25814707/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2215147728.jpg', 'rate': 8.9, 'director': ['森淳一'], 'composer': ['森淳一'], 'actor': ['桥本爱', '三浦贵大', '松冈茉优', '温水洋一', '桐岛加恋'], 'category': ['剧情'], 'district': ['Japan_日本'], 'language': ['日语'], 'showtime': 2015.0, 'length': 120.0, 'othername': ['Winter & Spring']}
{'id': 10773239, 'title': '小男孩', 'url': 'http://movie.douban.com/subject/10773239/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2230105606.jpg', 'rate': 8.2, 'director': ['阿加多·蒙特沃德'], 'composer': ['阿加多·蒙特沃德', 'Pepe Portillo'], 'actor': ['雅各布·萨尔瓦提', '凯文·詹姆斯', '迈克尔·拉帕波特', '大卫·亨瑞', '艾米丽·沃森', '埃杜瓦多·维拉斯蒂吉', '泰德·拉文', '田川洋行', '汤姆·威尔金森', '本·卓别林', '阿丽·兰德里', '亚布拉哈姆·本鲁比', '托比·胡斯', '凯莉·格蕾森', 'Candice Azzara'], 'category': ['剧情', '喜剧', '战争'], 'district': ['Mexico_墨西哥', 'United States of America_美国'], 'language': ['英语'], 'showtime': 2015.0, 'length': 106.0, 'othername': None}
{'id': 25870236, 'title': '可爱的你', 'url': 'http://movie.douban.com/subject/25870236/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2232074658.jpg', 'rate': 7.8, 'director': ['关信辉'], 'composer': ['关信辉', '张佩琼'], 'actor': ['杨千嬅', '古天乐', '吴耀汉', '吴浣仪', '姜皓文', '刘玉翠', '狄哲龙', '冯淬帆', '马浴柯', '火火', '黄文慧'], 'category': ['剧情'], 'district': ['China_香港', 'China_中国大陆'], 'language': ['汉语普通话', '粤语'], 'showtime': 2015.0, 'length': 113.0, 'othername': ['五个小孩的校长', '5个小孩的校长', 'Little Big Master']}
{'id': 26147706, 'title': '花与爱丽丝杀人事件', 'url': 'http://movie.douban.com/subject/26147706/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2222398443.jpg', 'rate': 8.0, 'director': ['岩井俊二'], 'composer': ['岩井俊二'], 'actor': ['苍井优', '铃木杏', '胜地凉', '黑木华', '木村多江', '平泉成', '相田翔子', '铃木兰兰', '郭智博', '木村绿子'], 'category': ['喜剧', '动画'], 'district': ['Japan_日本'], 'language': ['日语'], 'showtime': 2015.0, 'length': 100.0, 'othername': ['Hana to Alice Satsujin Jiken', 'The Case of Hana & Alice']}
{'id': 25761178, 'title': '百元之恋', 'url': 'http://movie.douban.com/subject/25761178/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p2205471169.jpg', 'rate': 8.3, 'director': ['武正晴'], 'composer': ['足立紳'], 'actor': ['安藤樱', '新井浩文', '稲川実代子', '早織', '宇野祥平', '坂田聡', '沖田裕樹', '吉村界人', '松浦慎一郎', '伊藤洋三郎', '重松収', '根岸季衣'], 'category': ['剧情', '喜剧', '运动'], 'district': ['Japan_日本'], 'language': ['日语'], 'showtime': 2014.0, 'length': 115.0, 'othername': ['百圆之恋', '一百日元的爱情', "100 Yen's Love"]}
{'id': 26219652, 'title': '少年班', 'url': 'http://movie.douban.com/subject/26219652/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2247339285.jpg', 'rate': 5.7, 'director': ['肖洋'], 'composer': ['张冀', '肖洋'], 'actor': ['孙红雷', '周冬雨', '董子健', '王栎鑫', '柳希龙', '李佳奇', '夏天', '赵立新', '王森'], 'category': ['剧情', '喜剧'], 'district': ['China_中国大陆'], 'language': ['汉语普通话'], 'showtime': 2015.0, 'length': 106.0, 'othername': ['The Ark of Mr. Chow']}
{'id': 25786077, 'title': '末日崩塌', 'url': 'http://movie.douban.com/subject/25786077/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2247341513.jpg', 'rate': 7.1, 'director': ['布拉德·佩顿'], 'composer': ['卡尔顿·库斯', '安德烈·法布里齐奥', '杰里米·帕斯莫尔'], 'actor': ['道恩·强森', '亚历珊德拉·达达里奥', '卡拉·古奇诺', '雨果·约翰斯通-伯特', '雅奇·潘嘉比', '科尔顿·海恩斯', '艾恩·格拉法德', '保罗·吉亚玛提', '凯莉·米洛', '李威尹', '瓦内萨·罗斯', '马特·杰拉德', '阿特·帕金森', '罗宾·阿特金·唐斯', '艾伦·D·柏温', '亚历克·乌特戈夫', '摩根·格莉芬', '杰米斯·巴特勒', '艾伦·波普尔顿'], 'category': ['动作', '冒险', '灾难'], 'district': ['United States of America_美国', 'Australia_澳大利亚'], 'language': ['英语'], 'showtime': 2015.0, 'length': 114.0, 'othername': ['加州大地震(台)', '圣安地列斯']}
{'id': 25958787, 'title': '深夜食堂 电影版', 'url': 'http://movie.douban.com/subject/25958787/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2205014862.jpg', 'rate': 7.8, 'director': ['松冈锭司'], 'composer': ['真边克彦', '小嶋健作', '松冈锭司', '安倍夜郎'], 'actor': ['小林薰', '绫田俊树', '不破万作', '松重丰', '安藤玉惠', '山中崇', '宇野祥平', '光石研', '小田切让', '高冈早纪', '柄本时生', '多部未华子', '余贵美子', '筒井道隆', '菊池亚希子', '田中裕子', '平田薫'], 'category': ['剧情'], 'district': ['Japan_日本'], 'language': ['日语'], 'showtime': 2015.0, 'length': 119.0, 'othername': ['Midnight Diner']}
{'id': 3608742, 'title': '冲出康普顿', 'url': 'http://movie.douban.com/subject/3608742/', 'cover': 'http://img3.douban.com/view/photo/photo/public/p2249238790.jpg', 'rate': 7.6, 'director': ['F·加里·格雷'], 'composer': ['乔纳森·赫尔曼', 'S·雷·利萨维治', '艾伦·温库', '安德丽亚·贝尔洛夫'], 'actor': ['科里·霍金斯', '杰森·米切尔', '小奥谢拉·杰克逊', '阿尔迪斯·霍吉', '保罗·吉亚玛提', '凯斯·斯坦菲尔德', '小尼尔·布朗', '小马龙·耶茨', '马修·博兰', 'R·马科斯·泰勒', '卡拉·帕特森', '亚历山德拉·希普', '科瑞·雷诺兹'], 'category': ['剧情', '音乐', '传记'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2015.0, 'length': 147.0, 'othername': ['再别康城']}
{'id': 11541282, 'title': '魔力麦克2', 'url': 'http://movie.douban.com/subject/11541282/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2251269074.jpg', 'rate': 5.9, 'director': ['格里高利·雅各布'], 'composer': ['雷德·卡罗林', '查宁·塔图姆'], 'actor': ['查宁·塔图姆', '马特·波莫', '乔·曼根尼罗', '安布尔·赫德', '贾达·萍克·史密斯', '伊丽莎白·班克斯', '安迪·麦克道威尔', '加布里埃尔·伊格莱西亚斯', '迈克尔·斯特拉罕', '克丽丝特尔·亨特', '简·麦克尼尔', '唐纳德·格洛弗', '凯文·纳什', '亚当·罗德里格兹', '史蒂芬·布斯', '罗达·格里菲丝', '金柏莉·德拉蒙德', '瑞克·佛莱尔', '胡安·彼德拉伊塔'], 'category': ['剧情', '喜剧', '音乐'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2015.0, 'length': 115.0, 'othername': ['巨揪舞壮士(港)', '舞力麦克:尺度极限XXL(台)', '魔力麦克XXL', 'Magic Mike 2']}
{'id': 25837175, 'title': '谜城', 'url': 'http://movie.douban.com/subject/25837175/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2257443441.jpg', 'rate': 5.5, 'director': ['林岭东'], 'composer': ['林岭东'], 'actor': ['古天乐', '余文乐', '佟丽娅', '张孝全', '谢天华', '元秋', '李璨琛', '伍允龙', '姜皓文', '林子善', '任达华', '高捷', '马浴柯', '谭炳文'], 'category': ['动作', '惊悚', '犯罪'], 'district': ['China_中国大陆', 'China_香港'], 'language': ['汉语普通话', '粤语', '闽南语'], 'showtime': 2015.0, 'length': 105.0, 'othername': ['迷城', '暴走迷城', 'Wild City']}
{'id': 10463953, 'title': '模仿游戏', 'url': 'http://movie.douban.com/subject/10463953/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2255040492.jpg', 'rate': 8.5, 'director': ['莫滕·泰杜姆'], 'composer': ['格拉汉姆·摩尔', '安德鲁·霍奇斯'], 'actor': ['本尼迪克特·康伯巴奇', '凯拉·奈特莉', '马修·古迪', '罗里·金奈尔', '艾伦·里奇', '马修·比尔德', '查尔斯·丹斯', '马克·斯特朗', '詹姆斯·诺斯科特', '汤姆·古德曼-希尔', '史蒂芬·威丁顿', '伊兰·古德曼', '杰克·塔尔登', '埃里克斯·劳瑟', '杰克·巴农'], 'category': ['剧情', '同性', '传记', '战争'], 'district': ['United Kingdom_英国', 'United States of America_美国'], 'language': ['英语', '德语'], 'showtime': 2015.0, 'length': 114.0, 'othername': ['模拟游戏', '解码游戏']}
{'id': 24397586, 'title': '小羊肖恩', 'url': 'http://movie.douban.com/subject/24397586/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2249261202.jpg', 'rate': 8.5, 'director': ['马克·伯顿 ', ' 理查德·斯塔扎克'], 'composer': ['马克·伯顿', '理查德·斯塔扎克'], 'actor': ['贾斯汀·弗莱彻', '约翰·斯帕克斯', '欧米德·吉亚李利', '理查德·韦伯', '凯特·哈伯', '蒂姆·汉兹', '安迪·尼曼', '西蒙·格林诺', '艾玛·泰特', '杰克·保尔森', '西恩·康诺利', '亨利·伯顿', '迪曼特·维瓦斯', '苏菲·劳顿', '妮娅·梅迪·詹姆斯'], 'category': ['喜剧', '动画', '冒险'], 'district': ['United Kingdom_英国', 'France_法国'], 'language': ['无对白'], 'showtime': 2015.0, 'length': 85.0, 'othername': ['小羊肖恩大电影', '超级无敌羊咩咩大电影之咩最劲(港)', '笑笑羊大电影(台)', '超级无敌羊咩咩 电影版', '笑笑羊 电影版']}
{'id': 6866928, 'title': '进击的巨人真人版:前篇', 'url': 'http://movie.douban.com/subject/6866928/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p2239093805.jpg', 'rate': 5.1, 'director': ['樋口真嗣'], 'composer': ['渡边雄介', '町山智浩', '谏山创'], 'actor': ['三浦春马', '长谷川博己', '水原希子', '本乡奏多', '三浦贵大', '樱庭奈奈美', '松尾谕', '石原里美', '皮埃尔泷', '国村隼', '渡部秀', '水崎绫女', '武田梨奈'], 'category': ['动作', '科幻', '惊悚'], 'district': ['Japan_日本'], 'language': ['日语'], 'showtime': 2015.0, 'length': 98.0, 'othername': ['The Movie']}
...
{'id': 1422954, 'title': '吮拇指的人', 'url': 'http://movie.douban.com/subject/1422954/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p1563658637.jpg', 'rate': 7.2, 'director': ['迈克·米尔斯'], 'composer': ['迈克·米尔斯', 'Walter Kirn'], 'actor': ['Ted Beckman', '本杰明·布拉特', '文森特·多诺费奥', 'Arvin V. Entena', 'Tyler Gannon', '凯丽·加纳', 'Allen Go', 'Dakota Goldhor', 'Walter Kirn', 'Kit Koenig', 'Sarah Lucht', 'Eric Normington', '南希·奥黛尔', 'Lanette Prazeau', '卢·泰勒·普奇'], 'category': ['剧情', '喜剧'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2005.0, 'length': 96.0, 'othername': ['吸拇指的人', '吮吸拇指的人']}
{'id': 2215609, 'title': '歌舞青春3:毕业季', 'url': 'http://movie.douban.com/subject/2215609/', 'cover': 'http://img3.douban.com/lpic/s3055372.jpg', 'rate': 7.3, 'director': ['肯尼·奥特加'], 'composer': ['Peter Barsocchini'], 'actor': ['扎克·埃夫隆', '瓦妮莎·哈金斯', '阿什丽·提斯代尔', '科宾·布鲁', '巴特·约翰逊', 'Leslie Wing', '艾莉森·瑞德'], 'category': ['剧情', '喜剧', '家庭'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 2008.0, 'length': 112.0, 'othername': ['歌舞青春3:毕业年', '歌舞青春3:毕业嘉年华']}
{'id': 1292718, 'title': '大河恋', 'url': 'http://movie.douban.com/subject/1292718/', 'cover': 'http://img4.douban.com/view/movie_poster_cover/lpst/public/p949393266.jpg', 'rate': 8.4, 'director': ['罗伯特·雷德福'], 'composer': ['理查德·弗雷登伯格'], 'actor': ['布拉德·皮特', '克莱格·谢佛', '汤姆·斯凯里特', '布兰达·布莱斯', '伊迪·迈克莱尔', '约瑟夫·高登-莱维特', '艾米丽·劳伊德', '斯蒂芬·谢伦', '塞尔玛·布莱尔'], 'category': ['剧情', '家庭'], 'district': ['United States of America_美国'], 'language': ['英语'], 'showtime': 1992.0, 'length': 123.0, 'othername': ['川流岁月(港)', '大河之恋', '一条贯穿的大河', '一条奔腾而过的河流']}
{'id': 1296835, 'title': '青春年少', 'url': 'http://movie.douban.com/subject/1296835/', 'cover': 'http://img3.douban.com/view/movie_poster_cover/lpst/public/p456194105.jpg', 'rate': 7.9, 'director': ['韦斯·安德森'], 'composer': ['韦斯·安德森', '欧文·威尔逊'], 'actor': ['詹森·舒瓦兹曼', '比尔·默瑞', '奥莉维亚·威廉姆斯', '卢克·威尔逊', '康妮·尼尔森'], 'category': ['剧情', '喜剧'], 'district': ['United States of America_美国'], 'language': ['英语', '拉丁语'], 'showtime': 1999.0, 'length': 93.0, 'othername': ['都是爱情惹的祸', '撬墙角', '冲动少年']}
节点和关系导入
python">from py2neo import Graph, Node, Relationship
# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474", name="neo4j", password='xxx')

添加四类实体:电影film,导演director,编剧composer和演员actor
以及建立电影film与其他三类实体entity之间的关系。

python">import json 
graph.delete_all() #清除neo4j中原有的结点等所有信息

with open('douban.json','r',encoding='utf-8') as f:
    res = json.load(f)
    for r in res:
        node_title = Node('film',name=r['title'],id=r['id'],rate=r['rate'],
                          category=','.join(r['category']) if r['category'] != None else None,
                          district=','.join(r['district']) if r['district'] != None else None,
                          showtime=r['showtime'],length=r['length'],
                          language=','.join(r['language']) if r['language'] != None else None,
                          othername=','.join(r['othername']) if r['othername'] != None else None)
        graph.create(node_title)
        if r['director'] != None: 
            for di in r['director']:
                node_director = Node('director',name=di)
                rel = Relationship(node_title,'director',node_director)
                graph.create(node_director)
                graph.create(rel)
        if r['composer'] != None:
            for co in r['composer']:
                node_composer = Node('composer',name=co)
                rel = Relationship(node_title,'composer',node_composer)
                graph.create(node_composer)
                graph.create(rel)
        if r['actor'] != None:
            for ac in r['actor']:
                node_actor = Node('actor',name=ac)
                rel = Relationship(node_title,'actor',node_actor)
                graph.create(node_composer)
                graph.create(rel)
使用Subgraph批量导入节点和关系

每次导入节点和关系非常耗时,py2neo提供了子图的方式可以批量导入节点和关系。

python">import json 
from py2neo import Subgraph
graph.delete_all() #清除neo4j中原有的结点等所有信息

nodes = []
relationships = []

with open('douban.json','r',encoding='utf-8') as f:
    res = json.load(f)
    for r in res:
        node_title = Node('film',name=r['title'],id=r['id'],rate=r['rate'],
                          category=','.join(r['category']) if r['category'] != None else None,
                          district=','.join(r['district']) if r['district'] != None else None,
                          showtime=r['showtime'],length=r['length'],
                          language=','.join(r['language']) if r['language'] != None else None,
                          othername=','.join(r['othername']) if r['othername'] != None else None)
        nodes.append(node_title)

        if r['director'] != None: 
            for di in r['director']:
                node_director = Node('director',name=di)
                rel = Relationship(node_title,'director',node_director)
                nodes.append(node_director)
                relationships.append(rel)
        if r['composer'] != None:
            for co in r['composer']:
                node_composer = Node('composer',name=co)
                rel = Relationship(node_title,'composer',node_composer)
                nodes.append(node_composer)
                relationships.append(rel)
        if r['actor'] != None:
            for ac in r['actor']:
                node_actor = Node('actor',name=ac)
                rel = Relationship(node_title,'actor',node_actor)
                nodes.append(node_actor)
                relationships.append(rel)
python">subgraph = Subgraph(nodes,relationships)
tx = graph.begin() 
tx.create(subgraph)

graph.commit(tx)
多标签实体和实体去重

有些人既是导演又是编剧或者演员,重复生成节点会导致重复,所以需要对实体进行去重,然后对唯一实体添加他的多个标签。

python">import json 
from py2neo import NodeMatcher
graph.delete_all() #清除neo4j中原有的结点等所有信息

entity = []
with open('douban.json','r',encoding='utf-8') as f:
    res = json.load(f)
    for r in res:
        node_title = Node('film',name=r['title'],id=r['id'],rate=r['rate'],
                          category=','.join(r['category']) if r['category'] != None else None,
                          district=','.join(r['district']) if r['district'] != None else None,
                          showtime=r['showtime'],length=r['length'],
                          language=','.join(r['language']) if r['language'] != None else None,
                          othername=','.join(r['othername']) if r['othername'] != None else None)
        #entity.append(node_title)
        graph.create(node_title)
        if r['director'] != None:
            for di in r['director']:
                if di not in entity:
                    entity.append(di)
                    node_director = Node('director',name=di)
                    rel = Relationship(node_title,'导演',node_director)
                    graph.create(node_director)
                else:
                    node_matcher = NodeMatcher(graph)
                    node = node_matcher.match('director').where(name=di).first()
                    if node == None:
                        node = node_matcher.match('composer').where(name=di).first()
                        if node == None:
                            node = node_matcher.match('actor').where(name=di).first()
                            node.add_label('director')
                        else:
                            node.add_label('director')
                    rel = Relationship(node_title,'导演',node)
                graph.create(rel)
        if r['composer'] != None:
            for co in r['composer']:
                if co not in entity:
                    entity.append(co)
                    node_composer = Node('composer',name=co)
                    rel = Relationship(node_title,'编剧',node_composer)
                    graph.create(node_composer)
                else:
                    node_matcher = NodeMatcher(graph)
                    node = node_matcher.match('composer').where(name=co).first()
                    if node == None:
                        node = node_matcher.match('director').where(name=co).first()
                        if node == None:
                            node = node_matcher.match('actor').where(name=co).first()
                            node.add_label('composer')
                        else:
                            node.add_label('director')
                    rel = Relationship(node_title,'编剧',node)
                graph.create(rel)
        if r['actor'] != None:
            for ac in r['actor']:
                if ac not in entity:
                    entity.append(ac)
                    node_actor = Node('actor',name=ac)
                    rel = Relationship(node_title,'演员',node_actor)
                    graph.create(node_actor)
                else:
                    node_matcher = NodeMatcher(graph)
                    node = node_matcher.match('actor').where(name=ac).first()
                    if node == None:
                        node = node_matcher.match('director').where(name=ac).first()
                        if node == None:
                            node = node_matcher.match('composer').where(name=ac).first()
                            node.add_label('actor')
                        else:
                            node.add_label('actor')
                    rel = Relationship(node_title,'演员',node)
                graph.create(rel)

http://www.niftyadmin.cn/n/5402498.html

相关文章

推特API(Twitter API)V2 查询用户信息

前面章节已经介绍使用code换取Token的整个流程了&#xff0c;这里不再重复阐述了&#xff0c;下面我们介绍如何使用Token查询用户信息等操作。 1.引入相关依赖Maven <dependency> <groupId>oauth.signpost</groupId> <artifactId>signpost-co…

能当老板的AI大模型多智体框架MetaGPT自动完成项目

能当老板的AI大模型多智体框架MetaGPT自动完成项目。 MetaGPT是一个创新的多智能体框架&#xff0c;它结合了大语言模型&#xff08;LLM&#xff09;和多智能体协作系统&#xff0c;旨在通过模拟人类工作流程来解决复杂问题。这个框架的核心在于将标准化操作程序&#xff08;SO…

数据分析Pandas专栏---第八章<Pandas时间值的处理>

前言: 时间是数据处理中不可或缺的因素&#xff0c;几乎所有数据都会伴随着时间的演变而产生。在数据分析和建模过程中&#xff0c;正确处理时间是至关重要的。在这样的背景下&#xff0c;Pandas提供了强大的工具和函数&#xff0c;使我们能够轻松处理时间序列数据。 无论是金…

【Unity实战】UGUI和Z轴排序那点事儿

如果读者是从Unity 4.x时代过来的&#xff0c;可能都用过NGUI这个插件&#xff08;后来也是土匪成了正规军&#xff09;&#xff0c;NGUI一大特点是可以靠transform位移的Z值进行遮挡排序&#xff0c;然而这个事情在UGUI成了难题&#xff08;Sorting Layer、Inspector顺序等因素…

【数据库】SQLite的基本指令、数据约束、联结表、触发器及索引的使用技巧

目录 一、SQLite 语句基础 1、创建表&#xff1a;create 语句 2、创建表&#xff1a;create 语句 (设置主键&#xff09; ​编辑 3、查看表 4、修改表&#xff1a;alter 5、删除表&#xff1a;drop table 语句 6、插入新行&#xff1a;insert into 语句--全部赋值 7、…

大数据分析案例-基于SVM支持向量机算法构建手机价格分类预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

小红书-放水果

题目&#xff1a; 放水果 把M个相同的水果放在N个同样的盘子里&#xff0c;允许有的盘子空着不放&#xff0c;问不同的放法数K是多少&#xff1f;请注意&#xff0c;5&#xff0c;1&#xff0c;1和1&#xff0c;5&#xff0c;1 是同一种放法。输入描述 第一行是测试数据的数目…

SpringBoot项目连接Redis报错:Connection refused: no further information

今天在使用SpringBoot连接Redis时发生了报错 明明Jedis能够连接成功为什么StringRedisTemplate就不行? 然后在网上找了一下说是关闭防火墙或者修改配置文件但是都不管用 最后发现是Redis在SpringBoot3之后yml的配置方式发生了改变 相较于之前多了一个前缀, 由于我刚开始没有…