基于豆瓣图书的推荐、知识图谱与知识引擎简单构建neo4j
文章推薦指數: 80 %
本项目主要贡献源来自豆瓣爬虫(数据源)[lanbing510/DouBanSpider][1]、知识图谱引擎[Agriculture_KnowledgeGraph][2]、[apple.turicreate][3]中内嵌的推荐算法。
首页
探索
1
2
.
登录/注册
全都知道了
{[item.content]}
拒绝
同意
拒绝
同意
重新认证
知道了
{[item.infoDateTime|formatTime]}
Varchar/DouBanRecommend
私有库
公有库
{[repoInfo.group_name]}
{[repoInfo.project.good]}
代码
评估
答疑
合并请求
版本发布
首页
探索
代码
评估
答疑
合并
发布
练习内容:
1.豆瓣图书推荐+搜索模块
2.豆瓣图书知识库简单应用(Neo4j的使用)
Youcannotselectmorethan25topics
Topicsmuststartwithaletterornumber,canincludedashes('-')andcanbeupto35characterslong.
2Commits
1Branch
0Tags
14MiB
Python
100%
DouBanRecommend
基于豆瓣图书的推荐、知识图谱与知识引擎简单构建neo4j
本项目主要贡献源来自豆瓣爬虫(数据源)[lanbing510/DouBanSpider][1]、知识图谱引擎[Agriculture_KnowledgeGraph][2]、[apple.turicreate][3]中内嵌的推荐算法。
主要拿来做练习,数据来源可见[lanbing510/DouBanSpider][4]。
练习内容:
豆瓣图书推荐+搜索模块
豆瓣图书知识库简单应用(Neo4j的使用)
推荐与搜索模块再结合豆瓣内部的API就更加牛逼~~~!([豆瓣API][11])
20210130更新
将book_excel.csv压缩成book_excel.zip放在文件夹book_recomend下面
一、数据整理
简单的把爬虫数据进行简单的整理。
主要做了一下针对每本书的评分,数据源中有两个值得用的字段:豆瓣书籍评分+书籍阅读人数,先等级化,然后进行平均,简单的得到了该书籍的得分。
#把豆瓣读书评分/豆瓣读书人群数量进行分箱
book_excel_all['rank_rank']=pd.qcut(book_excel_all['rank'],10,duplicates='drop',labels=False)
book_excel_all['people_num_rank']=pd.qcut(book_excel_all['people_num'],10,duplicates='drop',labels=False)
#分箱之后,进行平均
book_excel_all['scores']=(book_excel_all['rank_rank']+book_excel_all['people_num_rank'])/2
得到了如图的内容:
那么就开始做练习题啦~
二、豆瓣图书推荐+搜索模块
推荐+搜索模块主要使用的是apple.turicreate模块的算法,那么该模块的使用可见:
[推荐模块︱apple.Turicreate个性化推荐recommender(五)][7]
简单贴个当时整理的图。
推荐算法
函数名
内容
结果
基于item相似推荐
item_similarity_recommender
有预测功能,item之间喜爱的相似程度。
适用在给未知人群推荐的时候,可以寻找到item的相似对
因式分解
ranking_factorization_recommender以及factorization_recommender
最常用,支持附加信息共同进模型
基于内容的相似推荐
item_content_recommender
没有user概念,Item自己内容(多维度)决定,同类推荐,且没有点评数据可以提取的时候可以应用
数据格式不满足
项目流行度推荐
itempopularity
基于项目流行程度来推荐,user不进入模型,缺点:并不能因人而异,受异常值影响较大
主要内容见文件夹book_recomend.
本练习主要使用的算法是:基于item相似推荐
2.1搜索模块:
输入:总表book_excel_all(book_excel.csv)
输出:搜索到的文档
算法:没有建模,主要是:先完全匹配;匹配不到,局部匹配,包含
简单展示一下最终结果:
search_word='机器学习'
search(search_word,book_excel_all)
得到的结果可见:
2.2推荐模块:
输入:总表book_excel_all(book_excel.csv)、基于类目item的推荐表(book_excel_name.csv)、搜索词(该搜索词一定时全的)
输出:相似图书推荐
目前使用的算法:apple.turicreate中的item_similarity_recommender推荐算法
简单展示一下所写的功能:
search_word='浪潮之巅'
item_recomend(search_word,book_excel_all,recomend_item,topn=10)
结果:
2.3推荐对应表生成模块
根据核心数据源,利用apple.turicreate平台的基于item的推荐,主要是以书籍类别为主要筛选对象,对书籍类别进行相关推荐,输入信息表,输出相关推荐表格。
如表格:item_data_item.csv
三、豆瓣图书知识库简单应用(Neo4j的使用)
借用neo4j简单的实践了一下:neo4j的docker启动、数据导入模块、py2neo查询模块。
练习的时候有些心得:
保证节点的唯一性
犯错:在book_excel,书名信息是不唯一的,可能一本书既可能被归类到旅游、哲学、编程、创业
其他心得:
(1)从效果来看,如果关系类型比较少,比较适合直接用多表合一的方式进行查询;
知识图谱中的图数据库的查询,建立在关系错综复杂、才有查询必要。
(2)图数据库,一定要对节点+关系去重
时间消耗:
3W节点-25.7W关系-3h时间-1002MB
3.1neo4j的docker启动
neo4j开启的一种方法就是docker启动,neo4j的docker下载地址:https://hub.docker.com/_/neo4j/
笔者在使用neo4j的使用会遇到几个问题:
neo4j的内存默认设置太小,需要手动扩大
数据导入模块
已经导入的数据怎么保存
因为本地数据导入neo4j之中,最好把数据放在指定目录之中,于是乎在docker启动之前就可以设置一下:
dockerrun\
--publish=7474:7474--publish=7687:7687\
--volume=/matt/neo4j:/var/lib/neo4j/import--rm-tineo4jbash
其中/matt/neo4j是宿主机的目录,/var/lib/neo4j/import是docker之中本地导入csv的路径,那么这样就可以直接使用:LOADCSVWITHHEADERSFROM"file:///book_excel_name.csv"ASline
扩大内存的话,就需要到/neo4j/conf/neo4j.conf之中修改以下参数:
dbms.memory.heap.initial_size=1024G
dbms.memory.heap.max_size=1024G
dbms.memory.pagecache.size=10240M#缓存,可以调制到一些
在docker之中开启neo4j为:
/var/lib/neo4j/bin/neo4jstart
打开之后需要等待一段时间的启动。
已经导入的数据怎么保存?
备份Neo4j的数据:
1)停掉数据库.
2)备份D:\Neo4J\neo4j-enterprise-1.9.1\data目录下graph.db目录中的所有内容.
3)在服务器上拷贝graph.db目录中的内容到新的服务器的相同目录中,启动即可.
3.2数据导入模块
为了确保唯一性,所以导入的时候,书名节点、书类别节点、出版社节点都是唯一的,同时建立了书籍-类型的关系。
//导入书名节点
LOADCSVWITHHEADERSFROM"file:///book_excel_name.csv"ASline
CREATE(:BookNode{name:line.book_name,rank:line.rank,people_num:line.people_num,author:line.author,public_infos:line.public_infos,public_time:line.public_time,price:line.price})
//导入书类别节点
LOADCSVWITHHEADERSFROM"file:///book_excel_type.csv"ASline
CREATE(:BookType{type:line.type})
//MATCH(n:BookType)OPTIONALMATCH(n)-[r]-()DELETEn,r//删除命令
//导入书出版社节点
LOADCSVWITHHEADERSFROM"file:///book_excel_public.csv"ASline
CREATE(:BookPub{pub:line.public})
//MATCH(n:BookPub)OPTIONALMATCH(n)-[r]-()DELETEn,r//删除命令
//建立关系:书-类型
LOADCSVWITHHEADERSFROM"file:///book_excel.csv"ASline
MATCH(entity1:BookNode{name:line.book_name}),(entity2:BookType{type:line.type})
CREATE(entity1)-[:RELATION_TYPE]->(entity2);
这边导入的时候发现有些重复关系,懒...就不改了...
3.3py2neo查询模块
主要数据可见:douban_kg文档
frompy2neoimportNode,Relationship,Graph
graph=Graph(
"http://localhost:7474",
username="neo4j",
password="qwer@1234"
)
通过py2neo先链接neo4j数据库。
同时:
#查询书目内容
graph.find_one(label="BookNode",property_key="name",property_value='计算机视觉')
#label代表:标签
#property_key代表:节点属性
#property_value代表:具体属性名称
#查询书目-类型
graph.data("MATCH(entity1)-[:RELATION_TYPE]->(entity2)WHEREentity2.ytpe='旅行'RETURNrel,entity2")
©2021WRITEBUG
备案号京ICP备16025663号-5
用户手册
关于我们
加入我们
条款与协议
致谢
留言墙
学习圈
加入学习圈
探索
代码项目|
学习圈|
文章|
问答
用户手册
关于我们
加入我们
条款与协议
致谢
留言墙
学习圈
加入学习圈
探索
代码项目|
学习圈|
文章|
问答
©2021WRITEBUG
备案号:京ICP备16025663号-5
延伸文章資訊
- 1知识图谱 - 图书
知识图谱. 作者: 赵军 出版社: 高等教育出版社 出版年: 2018-12 页数: 312 定价: 49.90元 装帧: 平装 丛书: 人工智能丛书. ISBN: 9787040509847....
- 2weizhixiaoyi/DouBan-KGQA: 豆瓣书籍,电影类别的知识图谱 ...
豆瓣书籍,电影类别的知识图谱问答系统. Contribute to weizhixiaoyi/DouBan-KGQA development by creating an account on ...
- 3爬取豆瓣电影榜单构建知识图谱 - CSDN博客
作者想学习知识图谱,奈何没有数据,只能自己找。于是选择了豆瓣电影。网址: https://movie.douban.com/top250?start=0&filter= 640?wx_fmt=png.
- 4针对豆瓣TOP250电影知识图谱的构建(Python+neo4j) - 知乎
针对豆瓣TOP250电影知识图谱的构建(Python+neo4j) ... 我们直接分析电影点进去的详细页面,页面如下:(由于豆瓣在没有登录的情况下频繁对网站进行 ...
- 5爬取豆瓣电影榜单构建知识图谱 - 掘金
作者想学习知识图谱,奈何没有数据,只能自己找。于是选择了豆瓣电影。https://movie.douban.直接爬取主页面,主演内容会获取不全。于是想...