zoukankan      html  css  js  c++  java
  • python操作neo4j创建知识图谱模板

    数据:

    购买方名称 销售方名称 金额
    山东高速集团有限公司电子收费中心 哈尔滨告诉公司 2000W级别交易
    湖南道岳高速公路实业有限公司 湖北阿深南高速公路发展有限公司 2000W级别交易
    湖南道岳高速公路实业有限公司 湖北阿深南高速公路发展有限公司 100W级别交易
    湖南道岳高速公路实业有限公司 湖北阿深南高速公路发展有限公司 2000W级别交易
    山东高速集团有限公司电子收费中心 湖北阿深南高速公路发展有限公司 2000W级别交易
    山东高速集团有限公司电子收费中心 湖北阿深南高速公路发展有限公司 2000W级别交易
    山东高速集团有限公司电子收费中心 湖北阿深南高速公路发展有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 湖北阿深南高速公路发展有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 湖北阿深南高速公路发展有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 湖北中交嘉通高速公路发展有限公司 2000W级别交易
    湖北阿深南高速公路发展有限公司 湖南道岳高速公路实业有限公司 100W级别交易
    湖北阿深南高速公路发展有限公司 湖南道岳高速公路实业有限公司 500W级别交易
    湖北阿深南高速公路发展有限公司 湖南道岳高速公路实业有限公司 100W级别交易
    湖北阿深南高速公路发展有限公司 湖南道岳高速公路实业有限公司 500W级别交易
    湖北中交嘉通高速公路发展有限公司 湖南道岳高速公路实业有限公司 2000W级别交易
    山东高速集团有限公司电子收费中心 湖南道岳高速公路实业有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 湖南道岳高速公路实业有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 湖南道岳高速公路实业有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 湖南道岳高速公路实业有限公司 2000W级别交易
    湖南道岳高速公路实业有限公司 山东高速集团有限公司电子收费中心 8000W级别交易
    湖南道岳高速公路实业有限公司 山东高速集团有限公司电子收费中心 8000W级别交易
    湖南道岳高速公路实业有限公司 山东高速集团有限公司电子收费中心 2000W级别交易
    湖南道岳高速公路实业有限公司 山东高速集团有限公司电子收费中心 2000W级别交易
    现代投资股份有限公司 山东高速集团有限公司电子收费中心 8000W级别交易
    现代投资股份有限公司 山东高速集团有限公司电子收费中心 8000W级别交易
    现代投资股份有限公司 山东高速集团有限公司电子收费中心 2000W级别交易
    现代投资股份有限公司 山东高速集团有限公司电子收费中心 2000W级别交易
    现代投资股份有限公司 山东高速集团有限公司电子收费中心 2000W级别交易
    现代投资股份有限公司 山东高速集团有限公司电子收费中心 2000W级别交易
    湖南道岳高速公路实业有限公司 现代投资股份有限公司 8000W级别交易
    湖南道岳高速公路实业有限公司 现代投资股份有限公司 8000W级别交易
    山东高速集团有限公司电子收费中心 现代投资股份有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 现代投资股份有限公司 500W级别交易
    山东高速集团有限公司电子收费中心 现代投资股份有限公司 2000W级别交易
    山东高速集团有限公司电子收费中心 现代投资股份有限公司 100W级别交易
    from py2neo import Node, Graph, Relationship, NodeMatcher
    import pandas as pd
    
    
    class DataToNeo4j:
        def __init__(self):
            # 连接数据库
            link = Graph("http:localhost:7474", username="neo4j", password="rhino1qaz@wsx")
            self.graph = link
            # 建立节点
            self.buy = "buy"
            self.sell = "sell"
            self.graph.delete_all()  # 先清空数据库
            self.matcher = NodeMatcher(link)  # 然后定义一个matcher
    
        def create_node(self, node_buy_key, node_sell_key):
            """建立节点"""
            for name in node_buy_key:
                buy_node = Node(self.buy, name=name)
                self.graph.create(buy_node)
            for name in node_sell_key:
                sell_node = Node(self.sell, name=name)
                self.graph.create(sell_node)
    
        def create_relation(self, df_data):
            """建立联系"""
            for m in range(0, len(df_data)):
                # print(df_data['buy'][m], df_data['money'][m], df_data['sell'][m])
                rel = Relationship(self.matcher.match(self.buy).where("_.name=" + "'" + df_data['buy'][m] + "'").first(),
                                   df_data['money'][m],
                                   self.matcher.match(self.sell).where("_.name=" + "'" + df_data['sell'][m] + "'").first())
                self.graph.create(rel)
    
    
    class Processor:
        def __init__(self, path):
            self.invoice_data = pd.read_excel(path, header=0)
    
        def node_extraction(self):
            # 取出购买方名称到list
            node_buy_key = self.invoice_data['购买方名称'].tolist()
    
            node_sell_key = self.invoice_data['销售方名称'].tolist()
    
            # 去除重复的发票名称
            node_buy_key = list(set(node_buy_key))
            node_sell_key = list(set(node_sell_key))
    
            return node_buy_key, node_sell_key
    
        def relation_extraction(self):
            """联系数据抽取"""
    
            links_dict = {}
            sell_list = []
            money_list = []
            buy_list = []
    
            for i in range(0, len(self.invoice_data)):
                money_list.append(self.invoice_data[self.invoice_data.columns[19]][i])  # 金额
                sell_list.append(self.invoice_data[self.invoice_data.columns[10]][i])  # 销售方方名称
                buy_list.append(self.invoice_data[self.invoice_data.columns[6]][i])  # 购买方名称
    
            # 将数据中int类型全部转成string
            sell_list = [str(i) for i in sell_list]
            buy_list = [str(i) for i in buy_list]
            money_list = [str(i) for i in money_list]
    
            # 整合数据,将三个list整合成一个dict
            links_dict['buy'] = buy_list
            links_dict['money'] = money_list
            links_dict['sell'] = sell_list
            # 将数据转成DataFrame
            df_data = pd.DataFrame(links_dict)
            return df_data
    
    
    if __name__ == '__main__':
        # dataToNeo4j = DataToNeo4j()
        path = './Invoice_data_Demo.xls'
        processor = Processor(path)
        node_buy_key, node_sell_key = processor.node_extraction()
        print(node_buy_key)
        print(node_sell_key)
        df_data = processor.relation_extraction()
        dataToNeo4j = DataToNeo4j()
        dataToNeo4j.create_node(node_buy_key, node_sell_key)
        dataToNeo4j.create_relation(df_data)
    
    

    结果:

    参考

    知识图谱相关视频

  • 相关阅读:
    迅为龙芯2K1000开发板虚拟机ubuntu安装软件
    迅为恩智浦IMX6Q开发板系统固件TF卡烧写
    瑞芯微迅为iTOP-3399开发板资料更新啦!最新版本为1.3版本
    迅为-龙芯2K1000开发板虚拟机ubuntu系统开关机
    迅为IMX6ULL开发板Linux驱动初探-最简单的设备驱动-helloworld
    迅为-龙芯2K1000开发板虚拟机ubuntu基础操作
    开始Blog
    16 bit 的灰度图如何显示
    GPU 总结
    同步,异步,多线程和事件总结
  • 原文地址:https://www.cnblogs.com/xiximayou/p/15584980.html
Copyright © 2011-2022 走看看