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

文章目录

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

数据来源

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

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

数据整理导入

在这里插入图片描述

import json 

with open('douban.json','r',encoding='utf-8') as f:
    res = json.load(f)
    for r in res:
        print(r)
{'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': ['都是爱情惹的祸', '撬墙角', '冲动少年']}
节点和关系导入
from py2neo import Graph, Node, Relationship
# 连接neo4j数据库,输入地址、用户名、密码
graph = Graph("http://localhost:7474", name="neo4j", password='xxx')

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

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提供了子图的方式可以批量导入节点和关系。

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)
subgraph = Subgraph(nodes,relationships)
tx = graph.begin() 
tx.create(subgraph)

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

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

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.mfbz.cn/a/418776.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库-第二/三章 关系数据库和标准语言SQL【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下计数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。 参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。 文章目录 前言第二、三章 关系数据库和标准语言SQL2.1 关系2…

如何使用Portainer创建Nginx容器并搭建web网站发布至公网可访问【内网穿透】

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

STM32自学☞AD单通道

程序的最终运行成果: 当转动电位器时,数值和电压值发生变化 ad.c文件 #include "stm32f10x.h" #include "stm32f10x_adc.h" #include "ad.h" #include "stdint.h" void ad_Init(void) { /* 初始化步骤:…

Python爬虫——Urllib库-中

编解码 问题引入 例如: https://www.baidu.com/s?wd章若楠 https://www.baidu.com/s?wd%E7%AB%A0%E8%8B%A5%E6%A5%A0 第二部分的一串乱码就是章若楠 如果这里是写的章若楠就会 产生这样的错误 所以我们就可以使用get请求方式的quote方法了 get请求方式的q…

thefour--Love is like a tide

最后一部分了,要开始进行我们的训练了。 先上代码: import os import numpy as np from tqdm import tqdm import tensorflow as tf from thetwo import NeuralStyleTransferModel import theone import thethree #创建模型 modelNeuralStyleTransferM…

从零开始写 Docker(三)---基于 cgroups 实现资源限制

本文为从零开始写 Docker 系列第三篇,在mydocker run 基础上基于 cgroups 实现容器的资源限制。 完整代码见:https://github.com/lixd/mydocker 欢迎 Star 如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注…

C# Post数据或文件到指定的服务器进行接收

目录 应用场景 实现原理 实现代码 PostAnyWhere类 ashx文件部署 小结 应用场景 不同的接口服务器处理不同的应用,我们会在实际应用中将A服务器的数据提交给B服务器进行数据接收并处理业务。 比如我们想要处理一个OFFICE文件,由用户上传到A服务器…

紫罗兰栽培养护简单,这些要点多注意——花园传说

紫罗兰,以其独特的芬芳和优雅的花姿,历来备受人们的喜爱。无论是摆放在室内还是庭院中,紫罗兰都能为生活增添一份别样的雅致。那么,如何将紫罗兰成功栽培到家中呢?下面就为大家详细介绍紫罗兰的养殖方法及养护要点。 选…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例:内存用户认证案例 Demo:快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1:数据库用户认证案例 Demo:让数据库守护你的秘密 3.1.4 拓…

Django学习笔记-ModelForm使用(完全依赖)

1.创建模型 ,code,name,sex,entrydate 2.模型映射 python manage.py makemigrations myapp01,python manage.py migrate 3.创建模型表单,继承forms.ModelForm,Meta:元数据,models需引入,fields填写引用的模型变量 4.创建testModelForm.html,添加urls 5.views编写testmodelfo…

【Python笔记-设计模式】模板方法模式

一、说明 模板方法模式是一种行为设计模式,就是继承和多态的使用,将通用操作在父类中实现,不同操作的细节在子类中具体实现,父类只声明接口。 (一) 解决问题 减少相似逻辑的重复代码,提高代码复用性提高代码逻辑性&…

深入探讨Python中的os模块:基础大总结与实战【第109篇—os模块】

深入探讨Python中的os模块:基础大总结与实战 在Python编程中,操作系统(os)模块是一个强大的工具,它提供了与操作系统交互的各种功能,使得开发者能够轻松地执行文件和目录操作、获取系统信息以及执行系统命令。在本篇技术博客中&a…

React中对表格实现列表的拖拽排序

1. 效果:推拽手柄列 2. 实现: react中我们需要两个包来实现 ‘array-move’‘react-sortable-hoc’Installation Use npm $ npm install react-sortable-hoc --save 引入 import { arrayMoveImmutable } from array-move import { SortableContainer, SortableElement, Sort…

具身智能计算系统,机器人时代的 Android | 新程序员

【导读】具身智能作为一种新兴的研究视角和方法论,正在刷新我们对智能本质及其发展的理解:传统的 AI 模型往往将智能视为一种独立于实体存在的抽象能力,而具身智能则主张智能是实体与其环境持续互动的结果。 本文深度剖析了具身智能计算系统…

Unity(第十六部)声音和视频

声音 1、听声音 创建相机的时候,相机自带Audio Listener 多个相机的时候,我们只保留一个Audio Listener就可以 2、声音源,环境音 添加Audio Source就行中文叫声音源 3、脚本执行的声音 using System.Collections; using System.Collection…

如何用ai智能写作?推荐5款优秀的AI写作神器

写作是件繁琐的事情,也是需要耗费精力和时间的,还好目前有了ai写作神器的出现,帮助我们解决了不少的写作难题。这些AI写作工具不仅可以帮助我们提高写作效率,还能够生成高质量的内容。在本文中,我将向你推荐5款优秀的A…

CentOS 定时调度

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

深度学习 精选笔记(7)前向传播、反向传播和计算图

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

当无人机飞手真的有前途吗?无人机工作怎么找,感觉找不到太难了?无人机飞手未来的出路在哪里?

无人机飞手这个职业的前途很大程度上取决于市场需求和行业发展趋势。随着无人机技术的不断进步和应用领域的扩大,无人机飞手的需求量也在逐渐增加。然而,这个职业的发展也受到政策法规、技术更新换代等因素的影响,因此需要不断学习新技术和适…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章,文章中引入注目的是利用条件限制条件,不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题,其实如果单独去使用一些关键词去搜索&a…