文章目录
- 数据来源
- 数据整理导入
- 节点和关系导入
- 使用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)
- 最终知识图谱