AI应用开发-基于python的知识图谱技术

AI应用开发相关目录

本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧
适用于具备一定算法及Python使用基础的人群

  1. AI应用开发流程概述
  2. Visual Studio Code及Remote Development插件远程开发
  3. git开源项目的一些问题及镜像解决办法
  4. python实现UDP报文通信
  5. python实现日志生成及定期清理
  6. Linux终端命令Screen常见用法
  7. python实现redis数据存储
  8. python字符串转字典
  9. python实现文本向量化及文本相似度计算
  10. python对MySQL数据的常见使用
  11. 一文总结python的异常数据处理示例
  12. 基于selenium和bs4的通用数据采集技术(附代码)
  13. 基于python的知识图谱技术

文章目录

  • AI应用开发相关目录
    • 一、前言
      • 图数据:
      • 图数据库:
      • 知识图谱:
      • Neo4j:
    • 二、环境配置
    • 三、python基于已有数据构建知识图谱


一、前言

图数据、图数据库、知识图谱和Neo4j都是与数据处理和存储相关的概念和技术,它们在许多领域都有广泛的应用。下面是对它们的详细介绍:

图数据:

图数据是一种基于图的数据结构,用于表示实体(节点)及其之间的关系(边)。这种数据结构非常适合描述具有复杂关系的数据,如社交网络、交通网络等。
特点:图数据能够直观地表示实体之间的关系,并且支持高效的查询和遍历操作。

图数据库:

图数据库是一种用于存储、查询和管理图数据的数据库系统。它基于图的数据模型,提供高效的图遍历和查询算法,能够处理大规模的图数据。
特点:图数据库具有高效查询、高效存储、可扩展性和灵活性等特点。它支持多种数据类型和数据结构,可以处理复杂的关系数据,并满足不同的应用场景需求。
应用场景:图数据库在社交网络、推荐系统、生物信息学、网络安全、物联网等领域都有广泛的应用。例如,在社交网络中,可以使用图数据库存储用户之间的关系,进行好友推荐、社交网络分析等应用。

知识图谱:

知识图谱是人工智能领域的一个概念,主要用于描述真实世界中存在的各种实体和概念,以及它们之间的关系。它实际上是一种语义网络,建立在自然语言处理(NLP)的基础上。
特点:知识图谱能够高效地查询复杂的关联信息,从语义层面理解用户意图,从而改进搜索质量。
应用:知识图谱在智能问答、搜索、个性化推荐等方面有广泛应用。例如,它可以为聊天机器人提供广泛的知识,也可以为行业智能问答系统提供有针对性的专业领域知识。

Neo4j:

Neo4j是一个高性能的图形数据库,它将结构化数据存储在网络(图)上,而不是传统的表中。它具备完全的事务特性,并且是一个嵌入式的、基于磁盘的Java持久化引擎。
特点:Neo4j支持ACID事务,可以轻易扩展至上亿节点和关系,并且拥有自己的高级查询语言Cypher,用于高效检索。
应用:Neo4j常用于微博好友关系分析、城市规划、社交、推荐等应用。由于其嵌入式、高性能、轻量级等优势,Neo4j在图形数据库领域越来越受到关注。

二、环境配置

在win10上的安装:
0. java JDK安装

下载java8 exe:

https://www.oracle.com/java/technologies/downloads/#java8

在这里插入图片描述
安装exe,一路next:
在这里插入图片描述
在这里插入图片描述
配置环境变量
用户变量可以不用管
关注系统变量
在这里插入图片描述
新建

变量名:JAVA_HOME
变量值:C:\ProgramFiles\Java\jdk1.8.0_162(JDK的安装路径,以自己的安装路径为准)

新疆
新建CLASSPATH 变量,变量值为:

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

(注意前面是有一个点的)
在这里插入图片描述
最后!!!
path中新增下图内容:
在这里插入图片描述

%JAVA_HOME%\bin

在这里插入图片描述
验证可如上图

  1. 从官网下载最新版 Neo4j 社区版(Community)

需要注册后才能下载
下载好后解压到自己想放的盘里,例如:

D:\Program Files (x86)\neo4j-community-3.4.0

  1. 创建系统环境变量

在计算机-属性中创建系统环境变量NEO4J_HOME,并把主目录(E:\Program Files (x86)\neo4j-community-3.4.0)设置为变量值。

NEO4J_HOME=E:\Program Files (x86)\neo4j-community-3.4.0

在path中添加

%NEO4J_HOME%\bin

  1. 运行

CMD管理员身份运行

输入:

neo4j.bat console

或者

安装服务

neo4j install-service

启动服务

neo4j start

停止服务

neo4j stop

在浏览器中打开

http://localhost:7474

默认跳转到 http://localhost:7474/browser,出现Neo4j界面,则安装成功。

初始密码:neo4j 进去之后可以修改密码

如果neo4j stop不能停止neo4j,则用kill -s 9 强制杀掉进程。

  1. 切换数据库
    切换数据库
    每次启动neo4j,它只能读取一个数据库。默认情况下的Graph.db数据库。

能创建新数据库而不能删除现有数据库。

只需在$NEO4J_HOME\conf的目录编辑neo4j.conf。搜寻dbms.active_database=,其默认值应为graph.db。用其他名称替换它,然后再次启动neo4j。现在,将在该目录名下创建一个新数据库。

若要切换回以前的db,请重复这些步骤,只需将新值替换为graph.db在配置文件中。

注意:如果在neo4j启动的时候修改了配置文件,则需要重新启动一次,浏览器页面才会更新。

三、python基于已有数据构建知识图谱

初始文件如下:
在这里插入图片描述
设计文件,抽离其中数据,生成以 节点-节点-关系为格式存储的数据文件。

# 阶段划分抽象
import os
data_ls = os.listdir(r'C:\Users\12258\Desktop\bs_web\bs_figureDB\data')
print(data_ls)
def phase_split(ls):
    m_ls1 = []#中间变量1,列表,用于存储清洗、分词后的标题分词列表的列表
    for i in ls:
        m_ls2 = []# 中间变量2,列表,用于存储清洗过程中符合要求的词的列表
        for j in i.strip('.xlsx').split('-'):
            if len(j) == 1:
                pass
            else:
                m_ls2.append(j)
        m_ls1.append(m_ls2)
    result = []
    for i in m_ls1:
        if len(i) == 2:
            result.append(i[0]+'-'+i[1]+'-'+'1级次级')
        elif len(i) == 3:
            result.append(i[1]+'-'+i[2]+'-'+'2级次级')
        elif len(i) == 4:
            result.append(i[2]+'-'+i[3]+'-'+'3级次级')
    return result
result = phase_split(data_ls)
print(result)
# 属性划分抽象
import pandas as pd
data = pd.read_excel(r'C:\Users\12258\Desktop\bs_web\bs_figureDB\data'+'\\'+'0-变电工程数据-1-设计阶段-2-初设阶段-3-设备及材料清册.xlsx')
print(data.head())
result1 = []
for flag in range(3):#对三个字段作遍历
    if flag == 0:
        for i in range(len(data['名称'].tolist())):
            result1.append(data['名称'].tolist()[i]+'-'+'单位:'+str(data['单位'].tolist()[i])+'-'+'属性')
    elif flag == 1:
        for i in range(len(data['名称'].tolist())):
            result1.append(data['名称'].tolist()[i]+'-'+'数量:'+str(data['数量'].tolist()[i])+'-'+'属性')
    elif flag == 2:
        for i in range(len(data['名称'].tolist())):
            result1.append(data['名称'].tolist()[i]+'-'+'单价:'+str(data['单价'].tolist()[i])+'-'+'属性')
#print(result1)
for i in data['名称'].tolist():
    result1.append('设备及材料清册'+'-'+i+'-4级次级')
print(result1)

data = pd.read_excel(r'C:\Users\12258\Desktop\bs_web\bs_figureDB\data'+'\\'+'0-变电工程数据-1-设备阶段-2-档案部分-3-电气档案.xlsx')
print(data.head())
result2 = []
for flag in range(2):#对两个字段作遍历
    if flag == 0:
        for i in range(len(data['名称'].tolist())):
            result2.append(data['名称'].tolist()[i]+'-'+'规格:'+str(data['规格'].tolist()[i])+'-'+'属性')
    elif flag == 1:
        for i in range(len(data['名称'].tolist())):
            result2.append(data['名称'].tolist()[i]+'-'+'入库日期:'+str(data['入库日期'].tolist()[i])+'-'+'属性')
#print(result2)

for i in data['名称'].tolist():
    result2.append('电气档案'+'-'+i+'-4级次级')
print(result2)

# 存入txt文档保存
data_out = result+result1+result2
with open('result.txt','a',encoding='utf-8') as f:
    for i in data_out:
        f.write(i)
        f.write('\n')

结果如下:
在这里插入图片描述
根据该文件构建数据库,代码如下:

# 导入库
from py2neo import Graph, Node, Relationship
# 定义容器
father = []
son = []
connect = []
# 打开自定义数据文件,并将数据存入容器,格式为列表
path = r'result.txt'
with open(path,encoding='utf-8') as f:
    for i in f.readlines():
        mid = i.split('-')
        father.append(mid[0])
        son.append(mid[1])
        connect.append(mid[2])

# 连接数据库neo4j,输入个人配置
graph = Graph("http://localhost:7474//browser/", username='neo4j', password='luhai123', run="sub")
# 清空全部数据
graph.delete_all()
# 开启一个新的事务
graph.begin()
# 在新的事务中,利用列表中的数据添加点与边
# 循环遍历
for i in range(len(father)):
    start_node=Node("data",name=father[i])
    end_node=Node("data",name=son[i])
    relation=Relationship(start_node,connect[i],end_node)
    graph.merge(start_node,"data","name")
    graph.merge(end_node,"data","name")
    graph.merge(relation,"data","name")

# 终端:neo4j.bat console
# 知识图谱网站:http://127.0.0.1:7474/browser


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477386.html

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

相关文章

19 反向迭代器

反向迭代器和正向迭代器相反,比如一个数组内容是1,2,3,4,5。正向迭代器就是按顺序输出,反向迭代器是5,4,3,2,1,顺序倒着。想要第一个输出5,需要反向迭代器rbegin在5的位置,判断输出完的条件,rend在头节点的位置就行,只…

【go从入门到精通】select条件控制

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…

【八股】ThreadLocal原理

1. Thread.java 我们首先打开Thread.java源码,看到里面有一个ThreadLocalMap类型的变量threadLocals 2. ThreadLocal.java -> getMap(thread t) 然后ThreadLocal.java里面有一个getMap函数,传入的是线程,返回的是线程里面的ThreadLoca…

mysql无法看到3306端口监听

参考:https://blog.csdn.net/shumeigang/article/details/103902459 mysql> show global variables like ‘port’; 是0 原因是我的my.cnf有话: skip-network 或 注释掉,然后重新启动下数据库,运行netstat -an|grep 3306 就可以看到了

学习笔记Day13:Linux进阶

Linux进阶 Vim——Linux自带的文本编辑器 功能强大 命令模式 使用 vim <file>进入后的默认模式可以上下左右移动光标 方向键/hjkl快速到所在行的开头^/末尾$向下移动30行30j&#xff08;上左右同&#xff09;上下翻页Ctrlf向上&#xff0c;Ctrlb向下翻页快速回到文件第…

docker 进入容器内部命令

docker容器运行了&#xff0c;怎么进入容器内部查看内部的文件情况呢&#xff1f; 答&#xff1a;可以通过docker exec 的命令查看。 docker exec --help 可以查看命令介绍 &#xff1a; docker exec -it XXX /bin/bash XX为容器ID 进入容器内部 /bin/bash是需要添加的 不…

MT管理器 使用手册

MT管理器 论坛&#xff1a;https://bbs.binmt.cc/ 使用技巧系列教程&#xff1a;https://www.52pojie.cn/thread-1259872-1-1.html MT管理器 使用手册 &#xff1a;https://mt2.cn/guide/&#xff1a;https://www.bookstack.cn/read/mt-manual/80b8084f6be128c0.md&#xff…

vue学习日记15:普通组件的注册使用

一、概念 &#xff08;1&#xff09;局部注册 &#xff08;2&#xff09;全局注册 二、实践 1.局部注册 &#xff08;1&#xff09;代码 步骤&#xff1a;创建组件 导入 注册 使用 src文件夹下面仅仅保留这两个即可 其他两个文件夹可以删除 在src下面建立components文件夹…

刷题DAY30 | LeetCode 332-重新安排行程 51-N皇后 37-解数独

332 重新安排行程&#xff08;hard&#xff09; 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&…

Qt 不同数据类型转换

一.不同类型数据转换示例&#xff1a; #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QJsonDocument> #include <QJsonObject> #include <QDebug>int main(int argc, char *argv[]) {QCoreApplication::setAttribute…

【C语言】linux内核pci_enable_device函数和_PCI_NOP宏

pci_enable_device 一、注释 static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags) {struct pci_dev *bridge;int err;int i, bars 0;/** 此时电源状态可能是未知的&#xff0c;可能是由于新启动或者设备移除调用。* 因此获取当前的电源状态&…

【Flask】Flask项目结构初识

1.前提准备 Python版本 # python 3.8.0 # 查看Python版本 python --version 安装第三方 Flask pip install flask # 如果安装失败&#xff0c;可以使用 -i&#xff0c;指定使用国内镜像源 # 清华镜像源&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/ 检查 Flask 是…

网络: 网络层

IP地址: 分为网络号和主机号. 用来标识主机 IP协议 IP协议报文 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节. 8…

传输介质介绍,数据链路层,MAC地址的构成和作用

简单网络 1.网卡 2.物理介质 3.协议栈 双绞线&#xff1a; UTP 非屏蔽双绞线 屏蔽式双绞线 水晶头 串口电缆&#xff1a;连接运营商 广域网一个用户接入到广域网&#xff0c;早期来讲&#xff0c;光纤 物理层&#xff1a;本质是通信&#xff0c;数据传输&#xff0c;介质产…

数据结构02:线性表 链表习题01[C++]

考研笔记整理~&#x1f95d;&#x1f95d; 之前的博文链接在此&#xff1a;数据结构02&#xff1a;线性表[顺序表链表]_线性链表-CSDN博客~&#x1f95d;&#x1f95d; 本篇作为链表的代码补充&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;王道…

3.21小题总结

第一题&#xff1a;生日蛋糕 题解&#xff1a;这题是蛋糕结构是一层一层的&#xff0c;估计很多人很快就能想到是dfs&#xff0c;但是这题的难想的点在于 你每层的状态该怎么去确定&#xff0c;你怎么来确定每层的半径和高度是多少&#xff0c;一开始我也不知很理解&#xff0…

计算结构体的大小(结构体的内存对齐)

一&#xff1a;问题 问题所在&#xff1a;两个结构体应该都是6个字节大小&#xff0c;为什么一个12&#xff0c;一个6&#xff1f;&#xff1f;&#xff1f; 二&#xff1a;如何正确的计算结构体大小&#xff1f; 首先得掌握结构体的对齐规则&#xff1a; 第一&#xff1a; 第一…

Leetcode 994. 腐烂的橘子

心路历程&#xff1a; 一开始以为和刚做过的岛屿问题很像&#xff0c;只不过是把岛屿问题换成BFS去做&#xff0c;然后再加上一些计数的规则。结果做完后发现只能通过一半左右的测试用例&#xff0c;发现有一个逻辑错误在于&#xff0c;当腐烂的橘子位于两端时&#xff0c;可以…

约数(因数)问题(ACwing算法笔记)

869.试除法求约数 注意点&#xff1a; 1.试除法就是让i遍历的最大值到a/i。 2.约数成对存在&#xff0c;只遍历前一部分即可。 代码&#xff1a; #include<iostream> #include<queue> #include<algorithm> #include<cstring> #include<cmath>…

Go语言学习04~05 函数和面向对象编程

Go语言学习04-函数 函数是一等公民 <font color"Blue">与其他主要编程语言的差异</font> 可以有多个返回值所有参数都是值传递: slice, map, channel 会有传引用的错觉函数可以作为变量的值函数可以作为参数和返回值 学习函数式编程 可变参数 func s…