neo_spacecargo:Java实现Neo4j双向遍历扩展指南

需积分: 5 0 下载量 108 浏览量 更新于2024-12-24 收藏 21KB ZIP 举报
资源摘要信息:"neo_spacecargo:示例双向遍历扩展" 知识点: 1. Maven构建工具的使用: - mvn clean package:这是一个使用Maven构建工具的命令,用于清理之前的构建产物,并打包项目。通常用于构建Java项目。在此场景下,该命令用于创建一个可部署的jar文件。 2. 文件系统操作: - 将target/cargo-1.0.jar复制到Neo4j服务器的plugins目录:这一步骤需要开发者了解文件系统的目录结构,以及如何复制文件到特定位置。 3. Neo4j服务器配置: - 通过在conf/neo4j-server.properties中添加一行来配置Neo4j:这涉及到编辑服务器配置文件,增加一行指定属性。这需要开发者具备基本的配置文件编辑能力。 4. Neo4j服务端配置项: - org.neo4j.server.thirdparty_jaxrs_classes:这个配置项用于定义第三方的Java API,其中指定了请求的路径与服务类的映射。 5. Neo4j REST API的使用: - :GET /v1/service/helloworld:这是一个RESTful API请求,用于检查服务是否安装正确,可以正常工作。 - :GET /v1/service/migrate:这是一个用于运行迁移的RESTful API请求,通常是数据库架构或者数据迁移任务。 - :GET /v1/sample/createtestdata:这是一个用于创建测试数据的RESTful API请求。 - :POST /v1/service/query:这是一个用于查询数据库的POST请求,允许发送JSON格式的查询语句到服务端。 6. 数据库操作: - 查询数据库:在此处,这个操作是通过发送JSON格式的数据到服务端来实现的,具体操作依赖于Neo4j数据库和REST API的设计。 7. 插件开发: - 示例双向遍历扩展:这表明Neo_spacecargo是一个插件,扩展了Neo4j的功能。双向遍历可能指的是该插件提供了双向遍历图数据库的能力,这在图数据库中是一个重要的操作,用于探索数据点之间的关系。 8. Neo4j技术栈: - 描述中涉及到的名词,如Neo4j、Cypher查询语言等,表明这是一个围绕Neo4j数据库开发的项目。Neo4j是一个高性能的NoSQL图数据库,常用于复杂关系数据的存储和查询。 9. Java编程语言: - 标签中提到"Java",表明本项目主要使用Java编程语言开发。Java是实现上述操作和功能的主要工具。 10. 项目结构: - neo_spacecargo-master:这是项目的源代码包文件夹名称,表明这是源代码的主版本,并可能包含项目的根目录、源文件、资源文件、构建配置等。 11. 开发与部署流程: - 描述中隐含了一个开发流程,包括构建、部署、配置、测试和执行等步骤。这是一套标准的软件开发和部署流程,适用于多种技术栈和项目类型。 总结上述内容,本文件信息是关于一个名为neo_spacecargo的示例项目,该项目是一个在Neo4j数据库上实现双向遍历的Java插件。该插件的使用包括了通过Maven构建、配置Neo4j服务器、通过REST API与数据库交互等步骤。项目展示了从构建、部署到运行的整个开发周期,体现了软件开发的完整流程。

import numpy as np from py2neo import Graph graph = Graph("http://23/231/23/4:7474/browser/", auth=("x", "xxx!")) # from py2neo import Node, Relationship def load_data(): query = """ MATCH (u:custom)-[]->(p:broadband) RETURN u.number, p.name, 1 """ result = graph.run(query) # 构建用户商品矩阵 users = set() products = set() data = [] for row in result: user_id = row[0] product_id = row[1] quantity = row[2] users.add(user_id) products.add(product_id) data.append((user_id, product_id, quantity)) # 构建两个字典user_index,user_index,key为名称,value为排序的0~N-1的序号 user_index = {u: i for i, u in enumerate(users)} print("user_index:",user_index) product_index = {p: i for i, p in enumerate(products)} print("product_index:",product_index) # 构建全零矩阵 np.zeros matrix = np.zeros((len(users), len(products))) # 将存在关系的节点在矩阵中用值1表示 quantity = 1 for user_id, product_id, quantity in data: matrix[user_index[user_id], product_index[product_id]] = quantity # print("matrix:",matrix) # user_names = list(user_index.keys()) # product_names = list(product_index.keys()) # print("user_names:", user_names) # print("product_names:", product_names) # 转成用户商品矩阵 # matrix 与 np.mat转化后格式内容一样 user_product_matrix = np.mat(matrix) # print(user_product_matrix) return user_product_matrix def generate_dict(dataTmp): m,n = np.shape(dataTmp) print(m,n) data_dict = {} for i in range(m): tmp_dict = {} # 遍历矩阵,对每一行进行遍历,找到每行中的值为1 的列进行输出 for j in range(n): if dataTmp[i,j] != 0: tmp_dict["D_"+str(j)] = dataTmp[i,j] print(str(j)) print(tmp_dict["D_"+str(j)]) data_dict["U_"+str(i)] = tmp_dict print(tmp_dict) print(str(i)) for j in range(n): tmp_dict = {} for i in range(m): if dataTmp[i,j] != 0: tmp_dict["U_"+str(i)] = dataTmp[i,j] data_dict["D_"+str(j)] = tmp_dict return data_dict def PersonalRank(data_dict,alpha,user,maxCycles): rank = {} for x in data_dict.keys(): rank[x] = 0 rank[user] = 1 step = 0 while step < maxCycles: tmp = {} for x in data_dict.keys(): tmp[x] = 0 for i ,ri in data_dict.items(): for j in ri.keys(): if j not in tmp: tmp[j] = 0 tmp[j] += alpha+rank[i] / (1.0*len(ri)) if j == user: tmp[j] += (1-alpha) check = [] for k in tmp.keys(): check.append(tmp[k] - rank[k]) if sum(check) <= 0.0001: break rank = tmp if step % 20 == 0: print("iter:",step) step = step + 1 return rank def recommand(data_dict,rank,user): items_dict = {} items = [] for k in data_dict[user].keys(): items.append(k) for k in rank.keys(): if k.startswith("D_"): if k not in items: items_dict[k] = rank[k] result = sorted(items_dict.items(),key=lambda d:d[1],reverse=True) return result print("-------------") data_mat = load_data() print("-------------") data_dict = generate_dict(data_mat) print("-------------") rank = PersonalRank(data_dict,0.85,"U_1",500) print("-------------") result = recommand(data_dict,rank,"U_1") print(result) 优化这段代码,将U_N替换成U_NUMBER D_N替换成D_NAME

2023-06-13 上传