当前位置: 首页 > news >正文

AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习

一、知识图谱的概念

知识图谱是一个通过图结构来表示和组织知识的工具,它将事物、概念和它们之间的关系以图的形式呈现出来,图中的节点代表实体(比如人物、地点、事件等),而边代表这些实体之间的各种关系(例如“某人是某地的居民”,“某人是某公司的员工”等)。简单来说,知识图谱就像是一个庞大的电子地图,通过它我们可以知道不同事物是如何相互联系的。

举个简单的例子:假设你有一个图谱,节点包括“马云”、“阿里巴巴”和“电商行业”。如果我们在“马云”和“阿里巴巴”之间连接一条边,标注为“创办了”,就说明“马云”与“阿里巴巴”之间有一个“创办了”的关系。如果再连接一条边,标注为“属于”,连接“阿里巴巴”和“电商行业”,那么就说明“阿里巴巴”属于“电商行业”。通过这样的关系连接,我们可以清晰地了解实体之间的联系。 

二、知识图谱的作用

  1. 增强搜索引擎:通过知识图谱,搜索引擎不仅能返回关键词匹配的页面,还能理解背后的意思,提供更准确、相关的结果。例如,你搜索“马云”,不仅能找到他的介绍,还能了解到他与阿里巴巴、电子商务等多个相关的信息。

  2. 语义理解:机器可以通过知识图谱来理解自然语言的深层含义,提升人工智能的理解能力。这对聊天机器人、语音助手等非常重要。

  3. 数据关联与推理:知识图谱能帮助系统发现不同数据之间的潜在关联,并进行推理。例如,通过分析知识图谱,系统能推测出某个人可能有某种职业,或者某个产品可能属于哪个类别。

三、知识图谱的应用场景:

  1. 搜索引擎:如Google、百度等,通过知识图谱提供更智能的搜索结果。
  2. 智能问答系统:例如智能客服、语音助手,通过知识图谱理解用户提问的背后意思,提供精准的回答。
  3. 推荐系统:比如电商平台,根据用户的历史行为和知识图谱中的关联关系,推荐用户可能喜欢的商品或服务。
  4. 医疗领域:在医学研究中,知识图谱可以帮助医生根据症状、疾病、药物之间的关系,进行疾病诊断、药物推荐等。
  5. 金融领域:通过构建公司、股东、债务等方面的知识图谱,帮助分析公司间的关系、风险等。

知识图谱的核心价值在于,它能让机器理解和推理人与人、人与物、物与物之间的复杂关

四、networkx在知识图谱中的应用

 接下来,我们一起准备用 一个Python库来演绎一个简单的知识图谱,以让我们直观地理解这个概念地内涵。

我们即将用到一个Python库:networkx,我们先来看看这个networkx是个什么东:

networkx 是一个用于创建、分析和可视化复杂网络的 Python 库。它支持多种图的表示方式,包括有向图、无向图、加权图、带标签的图等,广泛应用于图论、社交网络分析、推荐系统等领域。

A、networkx 主要功能

  1. 图的创建与操作

    • networkx 提供了多种方法来创建图(如 Graph() 创建无向图、DiGraph() 创建有向图)和操作图中的节点和边。
    • 可以添加或删除节点和边,并支持为节点和边附加属性(如权重、标签等)。
  2. 图算法

    • 提供了丰富的图算法,包括最短路径计算、最大流、图的连通性分析、社区检测等。
    • 还可以进行深度优先搜索(DFS)、广度优先搜索(BFS)等常见图遍历。
  3. 图的分析

    • 提供了计算图的度数、中心性、聚类系数、图的直径等常用图分析指标。
  4. 可视化

    • 使用 matplotlib 等库支持简单的图形可视化。可以通过 nx.draw() 等方法绘制图形,支持多种布局、节点颜色、边的标签等。

基本概念

  • 节点(Node):图中的基本元素,通常表示一个对象、个体或实体。
  • 边(Edge):连接节点的线,表示节点之间的关系。
  • 加权边(Weighted Edge):边可以有一个附加的权重值,表示节点之间关系的强度或其他性质。
  • 图(Graph):由一组节点和一组边构成的结构。

B、networkx 基本用法示例

1. 创建图并添加节点和边

import networkx as nx# 创建一个无向图
G = nx.Graph()# 添加节点
G.add_node("A")
G.add_node("B")# 添加带权重的边
G.add_edge("A", "B", weight=4)# 查看图的节点和边
print(G.nodes())  # 输出 ['A', 'B']
print(G.edges())  # 输出 [('A', 'B')]
  • G.nodes() 返回图中所有的节点,结果是一个列表或集合,表示图中存在的所有节点。
  • G.edges() 返回图中所有的边,结果是一个包含元组的列表,每个元组表示一条边,元组中的元素是边的两个端点(节点)。

2. networkx 可视化图

import networkx as nx
import matplotlib.pyplot as plt
# 创建一个无向图
G = nx.Graph()
# 添加节点
G.add_node("A")
G.add_node("B")
# 添加带权重的边
G.add_edge("A", "B", weight=4)
# 查看图的节点和边
print(G.nodes())  # 输出 ['A', 'B']
print(G.edges())  # 输出 [('A', 'B')]
# 绘制图
nx.draw(G, with_labels=True, node_size=3000, node_color="skyblue", font_size=15)
# 显示图形
plt.show()

 

上述代码生成了一张两个节点的关系图

无向图

无向图是图论中的一种图类型,其中的边没有方向,即边连接的两个节点之间是对称的。在无向图中,边 (A, B)(B, A) 是等效的,表示节点 A 和节点 B 之间存在一种双向的关系。

networkx 中,无向图是通过 nx.Graph() 创建的。它表示的关系没有方向性,边 (A, B) 只是表示 AB 之间有某种联系,而不会区分是从 AB 还是从 BA

权重的作用

在图中,边的权重表示连接两个节点之间的强度、成本、距离或其他某种度量。边的权重是一个数值,用来量化节点之间的关系。在 networkx 中,边的权重是通过为边添加一个属性来实现的。

通过设置权重,我们可以在图的算法中考虑不同边之间的差异。例如,在寻找最短路径时,算法会考虑权重较小的边优先,而不是简单地选择边数较少的路径。

3. networkx 计算最短路径

# 创建一个有向图
G = nx.DiGraph()# 添加节点和边(带权重)
G.add_edge("A", "B", weight=2)
G.add_edge("B", "C", weight=3)
G.add_edge("A", "C", weight=6)# 计算从 A 到 C 的最短路径
shortest_path = nx.shortest_path(G, source="A", target="C", weight="weight")
print(shortest_path)  # 输出 ['A', 'B', 'C']

为什么要创建 有向图

在图论中,有向图是指边有方向的图。每条边表示一个方向性的关系,比如从 AB,而不是从 BA。有向图适合描述单向的关系,比如道路、数据流、电路等。

networkx 中,有向图是通过 nx.DiGraph() 创建的。它与无向图的主要区别在于边有方向性。例如:

  • ("A", "B") 表示从节点 A 到节点 B 的连接,而不能表示反向关系(BA)。
  • 如果需要双向关系,可以显式添加 ("B", "A") 的边。

在上面的代码中,创建有向图是为了明确定义从 AB、从 BC 的单向路径,便于计算有方向限制的最短路径。

为什么从 AC 的最短路径是 A -> B -> C 而不是 A -> C

这是因为路径的选择是基于权重(weight)的最小值,而不是直接看节点之间是否有连接。

图的结构和权重:

你的有向图包含以下边和权重:

  1. ("A", "B") 的权重是 2
  2. ("B", "C") 的权重是 3
  3. ("A", "C") 的权重是 6
最短路径计算过程:

networkx.shortest_path() 函数根据 权重之和 来寻找从起点到终点的最短路径:

  1. A 直接到 C:路径是 ["A", "C"],权重为 6
  2. AB 再到 C:路径是 ["A", "B", "C"],总权重为 2 + 3 = 5

显然,第二条路径的权重总和更小(5 < 6),因此从 AC 的最短路径是 ["A", "B", "C"]

为什么“直线”不是最短路径?

难道不是AC这个直线距离最短吗?

从节点 A 到节点 C 的确有一条直接的边 (A, C),并且它是“直线”。但最短路径计算的关键并不是看边是否直接连接,而是基于权重的最小和。

在图中,“直线”或“直接连接”指的是节点之间是否有一条直接的边,而最短路径算法关注的是路径的权重总和,而不是边的数量或是否是直接连接。

4. networkx 计算节点的度数

# 计算节点的度数(与该节点相连的边数)
degree_A = G.degree("A")
print(degree_A)  # 输出 2 (因为 A 与 B 和 C 都有连接)

节点的度数的实际意义

在图论中,**节点的度数(Degree)**是指与该节点相连的边的数量。

对于无向图:
  • 节点的度数是所有直接连接到该节点的边的数量。
  • 例如,如果节点 A 有两条边分别连接到节点 BC,则节点 A 的度数为 2
对于有向图(如 DiGraph):
  • 有向图的度数分为两种:
    1. 入度(In-degree):指指向该节点的边的数量。
    2. 出度(Out-degree):指从该节点出发的边的数量。
  • networkx 中,G.degree(node) 会返回该节点的 总度数,即入度和出度的总和。

5、networkx 常见图类型

  • 无向图 (Graph):节点之间的关系没有方向性。
  • 有向图 (DiGraph):节点之间的关系是有方向的。
  • 多重图 (MultiGraphMultiDiGraph):允许多条边连接同一对节点。

优势

  • 灵活性:支持多种类型的图结构,能够处理加权、无向、有向等多种情境。
  • 丰富的算法支持:提供了很多经典的图算法,适用于网络分析、社交网络分析等领域。
  • 易于使用:简洁的 API 使得用户可以快速构建和操作图。

networkx 是一个强大且易用的工具库,适用于各种图分析任务。无论是社交网络、推荐系统还是知识图谱的构建,都可以利用这个库来表示和分析图数据。如果你需要操作复杂网络或进行图论研究,networkx 是一个非常合适的选择。

五、用PYTHON创建一个知识图谱

(1)示例一,人物关系图

一个简单的知识图谱可以包含几个人物和他们之间的关系,例如:“Alice”“Bob” 的朋友,“Bob” 住在 “New York”,等等。

下面是一个用 Python 和 networkx 库来演绎一个简单知识图谱的例子:

安装 networkx

首先,如果没有安装 networkx 库,可以通过以下命令安装:

pip install networkx

Python代码示例

import networkx as nx
import matplotlib.pyplot as plt# 创建一个空的有向图
G = nx.Graph()# 添加节点
G.add_node("Alice")
G.add_node("Bob")
G.add_node("New York")
G.add_node("Jane")# 添加边(关系)
G.add_edge("Alice", "Bob", relationship="friend")
G.add_edge("Bob", "New York", relationship="lives_in")
G.add_edge("Bob", "Jane", relationship="colleague")# 可视化知识图谱
pos = nx.spring_layout(G)  # 设置节点布局
plt.figure(figsize=(8, 6))
nx.draw(G, pos, with_labels=True, node_size=3000, node_color='skyblue', font_size=12, font_weight='bold')# 为每条边添加标签(表示关系)
edge_labels = nx.get_edge_attributes(G, 'relationship')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)# 显示图形
plt.title("Simple Knowledge Graph")
plt.show()

代码说明:

  1. networkx.Graph():创建一个无向图。
  2. add_node():添加节点(实体)。
  3. add_edge():添加边(实体之间的关系),可以通过 relationship 属性来指定关系的类型。
  4. nx.spring_layout():自动生成节点的布局方式。
  5. nx.draw():绘制图形。
  6. nx.draw_networkx_edge_labels():在边上添加标签,表示关系。

结果:

这段代码会生成一个简单的知识图谱,显示:

  • AliceBob 之间的关系是“朋友”。
  • BobNew York 之间的关系是“住在”。
  • BobJane 之间的关系是 “同事”

扩展:

  • 可以添加更多的节点和边,表示更多的实体和关系。
  • 使用更复杂的图布局和样式来改善图的可视化效果。

这只是一个基础示例,知识图谱的应用非常广泛,涉及的内容可以更加复杂和丰富。

(2)示例2,从文本中构建知识图谱

假设有一篇新闻,我们是否能让系统自动从文本中提取相应的信息来自动生成知识图谱呢? 

这个想法完全可以实现的!完全可以从一篇新闻文本中提取信息并自动生成知识图谱。这个过程通常包括以下几个步骤:

  1. 文本预处理:对新闻文本进行清理、分词等处理,提取有意义的实体(如人物、地点、组织等)和关系(如“是”、“在”、“属于”等)。

  2. 命名实体识别(NER):从文本中识别出重要的实体,如人名、地名、机构名等。

  3. 关系抽取:确定实体之间的关系,通常通过自然语言处理(NLP)技术如依存句法分析、规则匹配、或基于机器学习的方法来实现。

  4. 构建知识图谱:使用 networkx 或其他图数据库,将识别出的实体作为节点,实体间的关系作为边,构建出知识图谱。

一个简单的例子:

假设我们有一篇新闻,内容如下:

“Alice 是 Bob 的朋友。Bob 住在 New York。Alice 喜欢去 Central Park。”

从这篇文本中,我们可以提取出如下信息:

  • AliceBob 是朋友。
  • Bob 住在 New York
  • Alice 喜欢 Central Park

代码示例

我们可以通过 NLP 库(如 spaCy)来进行实体识别和关系抽取,然后用 networkx 来生成知识图谱。

安装所需库
pip install spacy networkx matplotlib
python -m spacy download en_core_web_sm
Python 代码
import spacy
import networkx as nx
import matplotlib.pyplot as plt# 加载spacy模型
nlp = spacy.load("en_core_web_sm")# 输入的新闻文本
text = "Alice is a friend of Bob. Bob lives in New York. Alice likes to visit Central Park."# 使用spaCy进行NER(命名实体识别)
doc = nlp(text)# 创建一个图
G = nx.Graph()# 存储实体及其关系
entities = []
relationships = []# 提取命名实体
for ent in doc.ents:entities.append(ent.text)# 提取关系(这里假设我们通过简单的规则抽取关系)
for sent in doc.sents:tokens = [token.text for token in sent]# 定义一些简单的规则来抽取关系if "friend" in tokens:G.add_edge("Alice", "Bob", relationship="friend")elif "lives in" in " ".join(tokens):G.add_edge("Bob", "New York", relationship="lives_in")elif "likes" in tokens:G.add_edge("Alice", "Central Park", relationship="likes_to_visit")# 可视化生成的知识图谱
pos = nx.spring_layout(G)
plt.figure(figsize=(8, 6))
nx.draw(G, pos, with_labels=True, node_size=3000, node_color='skyblue', font_size=12, font_weight='bold')# 为边添加关系标签
edge_labels = nx.get_edge_attributes(G, 'relationship')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)plt.title("Knowledge Graph Generated from News Text")
plt.show()

代码解释

  1. 使用 spaCy 提取实体

    • nlp(text) 会将文本解析成一个 doc 对象,其中包含了每个词和命名实体的详细信息。
    • 使用 doc.ents 来获取命名实体(如人物、地点等)。
  2. 关系抽取

    • 在这个示例中,我们简单地通过检查特定关键词(如“friend”,“lives in”,“likes”)来构造关系。
    • 在实际应用中,可以使用更复杂的技术,如依存句法分析或训练机器学习模型来自动抽取实体间的关系。
  3. 生成知识图谱

    • 利用 networkx 来创建一个无向图,并用边表示实体之间的关系。
    • nx.draw() 用于绘制图形,nx.draw_networkx_edge_labels() 用来为每条边添加关系标签。

最后 系统自动地解析了文本中地关系,并自动生成了一张知识图谱: 

扩展知识:

这个示例中关系的抽取非常简单,实际应用中通常会采用更复杂的方法来处理,例如:

  • 依存句法分析:通过分析句子的语法结构,确定哪些词语是主谓宾关系。
  • 预训练模型:使用如 BERT 等预训练模型,通过细粒度的分类或关系提取来自动识别实体之间的关系。
  • 图数据库:构建一个更加复杂的知识图谱,并存储在图数据库(如 Neo4j)中,方便查询和推理。

通过这些方法,可以将新闻文本中蕴含的知识自动转化为知识图谱,便于进一步分析和应用。

在文末需要说明的一点是,我们在这里讲的 【知识图谱】, 实际应用中大多数情况下并不是以图片的形式来展示的,它的本质是一种数据的关系结构,这种关系结构将很多关联的信息联系在一起,组成了我们所说的【知识图谱】

这就是AI的应用,入门后,逐步练习,逐步领悟,逐步融汇贯通,不久的将来,你的段位会越来越高的!

相关文章:

AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习

一、知识图谱的概念 知识图谱是一个通过图结构来表示和组织知识的工具&#xff0c;它将事物、概念和它们之间的关系以图的形式呈现出来&#xff0c;图中的节点代表实体&#xff08;比如人物、地点、事件等&#xff09;&#xff0c;而边代表这些实体之间的各种关系&#xff08;…...

windows系统的环境变量(系统变量)不能编辑可能是这个原因

有些电脑从开始菜单那搜索“环境变量”后是没法编辑系统变量的&#xff0c;只能从设置里面进”环境变量“来进行编辑。 可以观察到系统环境变量即便是点击到了,但还是无法进行编辑...

各种服务器使用 yum 安装 nginx

1. 在Red Hat Enterprise Linux (RHEL) 及其衍生版本&#xff08;如CentOS, Oracle Linux, Rocky Linux, AlmaLinux&#xff09;上安装Nginx的步骤如下&#xff1a; 安装前提条件 首先&#xff0c;确保系统已安装yum-utils工具&#xff0c;这将有助于管理软件包和仓库&#x…...

基于BesselJ函数,构建AI中的卷积神经网络之新型卷积核

原创&#xff1a;daode3056(daode1212) BesselJ函数,来自微分方程&#xff1a; 它有通解有以下形式&#xff1a; 就取J0--J5的函数图像&#xff0c;如下&#xff1a; 现取J1(x),也就是红色的这支&#xff0c;作新的函数&#xff1a; 这一函数的导数与不定积分如下&#xff1a;…...

容器镜像仓库

文章目录 1、docker hub1_注册2_登录3_创建容器镜像仓库4_在本地登录Docker Hub5_上传容器镜像6_下载容器镜像 2、harbor1_获取 docker compose二进制文件2_获取harbor安装文件3_获取TLS文件4_修改配置文件5_执行预备脚本6_执行安装脚本7_验证运行情况8_访问harborUI界面9_harb…...

qtcanpool 知 08:Docking

文章目录 前言口味改造后语 前言 很久以前&#xff0c;作者用 Qt 仿照前端 UI 设计了一个 ministack&#xff08;https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h&#xff09; 控件&#xff0c;这个控件可以折叠。部分用户体验后&#…...

车载VR可视化解决方案

车载VR可视化解决方案是通过融合跟踪用户头部运动的特殊预测算法与惯性测量数据而开发的。该系统将大范围虚拟现实跟踪技术与IMU传感器相结合&#xff0c;为VR和AR应用打造了一套全面的运动跟踪与渲染流程&#xff0c;极大地方便了虚拟现实头显制造商定制可视化流程。 该车载VR…...

hhdb数据库介绍(10-43)

安全 密码安全管理 密码安全管理为用户提供了对计算节点数据库用户与存储节点的连接用户、备份用户的密码有效期监控提醒。到期后自动提示用户修改密码以提升系统的安全性。 数据库用户密码 &#xff08;一&#xff09;密码修改 用户可以在“安全->密码安全管理->数据…...

【优选算法 二分查找】二分查找入门详解:二分查找 & 在排序数组中查找元素的第一个和最后一个位置

二分查找 题目描述 题目解析 暴力解法 我们可以从左往右遍历一次数组&#xff0c;如果存在 target 则返回数组的下标&#xff0c;否则返回 -1&#xff1b; 时间复杂度 O(N)&#xff0c;因为没有利用数组有序的特点&#xff0c;每次比较只能舍弃一个要比较的数&…...

Python导入moviepy找不到editor 视频没有声音设置audio_codec参数

moviepy合成视频出错&#xff1a; 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor问题二&#xff1a;合成的视频没有声音 问题一&#xff1a;导入moviepy.editor找不到editor&#xff0c;No module named moviepy.editor from …...

FreeSWITCH auto-rtp-bugs 研究

还在探索中... 抓一个现场的包&#xff0c; Fs 收 rtp 包正常&#xff0c;但 发 rtp 包有问题&#xff0c;比如上次 ts 是 1 万 &#xff0c;而这次是 1000&#xff0c;并且居然没有 marker。百思不得解。 vars.xml 增加一个全局变量的配置&#xff1a; <X-PRE-PROCESS …...

TypeScript 在 React 中的应用

文章目录 前言一、为什么要在 React 中使用 TypeScript&#xff1f;二、如何在React中使用 TypeScript三、高级类型结语 前言 随着前端开发的复杂度不断提升&#xff0c;开发者对于代码质量、可维护性和开发效率的要求也日益增高。TypeScript 作为一种为 JavaScript 添加静态类…...

汇编和C语言访问存储器

一、汇编语言访问存储器 1、读存储器 LDR R1, [R2] 2、写存储器 STR R1, [R2] 二、C语言访问存储器 1、读存储器 data *ADDR; 2、写存储器 *ADDR data;...

14.3、特洛伊木马分析与防护

目录 特洛伊木马概念与分类特洛伊木马运行机制特洛伊木马植入技术特洛伊木马隐藏技术特洛伊木马存活技术特洛伊木马防范技术Rootkit是什么? 特洛伊木马概念与分类 病毒不具备传播能力&#xff0c;但是蠕虫具备 特洛伊木马运行机制 木马攻击过程主要分为五个部分: ① 寻找攻…...

SpringBoot 分层解耦

从没有分层思想到传统 Web 分层&#xff0c;再到 Spring Boot 分层架构 1. 没有分层思想 在最初的项目开发中&#xff0c;很多开发者并没有明确的分层思想&#xff0c;所有逻辑都堆砌在一个类或一个方法中。这样的开发方式通常会导致以下问题&#xff1a; 代码混乱&#xff1…...

不一样的CSS(4)--icon图标系列之svg

序言 上一节内容我们讲解了如何利用css去画一个五角星&#xff0c;其中包括了使用svg的方法&#xff0c;有些小伙伴们对svg的使用不是很了解&#xff0c;那么本节内容我们主要来讲一下&#xff0c;关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…...

Go-知识依赖管理2

Go-知识依赖管理2 1. go.sum1.1 go.sum 文件记录1.2 生成1.3 校验1.4 校验和数据库2. 模块代理2.1 GOPROXY 介绍2.2 代理协议2.2.1 获取模块列表2.2.2 获取模块元素数据2.2.3 获取 go.mod 文件2.2.4 获取代码压缩包2.2.5 获取模块的最新可用版本2.2.6 下载过程2.3 观察下载步骤…...

el-select的搜索功能

el-select的相关信息&#xff1a; 最基本信息 v-model的值为当前被选中的el-option的 value 属性值 :label是选择器可以看到的内容 过滤搜索 普通过滤搜索 <el-selectv-model"selectedCountry"placeholder"请选择国家"filterable:loading"lo…...

批量将不同的工作簿合并到同一个Excel文件

批量将不同的工作簿合并到同一个Excel文件 下面是一个示例&#xff0c;展示如何批量将不同的工作簿合并到同一个Excel文件&#xff0c;并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下&#xff1a; 步骤 1: 安装必要的库 首先确保你已安装 pan…...

git遇见冲突怎么解决?

问&#xff1a; 回答&#xff1a;...

Spring和SpringBoot的关系和区别?

大家好&#xff0c;我是锋哥。今天分享关于【Spring和SpringBoot的关系和区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring和SpringBoot的关系和区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring和Spring Boot是两种相关但有所…...

python学习——字符串的编码和解码

在Python中&#xff0c;字符串的编码和解码是处理文本数据时非常重要的概念。以下是对字符串编码和解码的详细解释&#xff1a; 字符串编码 字符串编码是将字符串转换成字节序列的过程。Python中的字符串是Unicode编码的&#xff0c;所以在将字符串转换成字节序列时&#xff…...

Web游戏开发指南:在 Phaser.js 中读取和管理游戏手柄输入

前言 Phaser.js 是一个广受欢迎的 HTML5 游戏框架&#xff0c;为开发者提供了创建跨平台 2D 游戏的强大工具。在现代游戏开发中&#xff0c;支持游戏手柄已成为提升玩家体验的重要方面。本文将详细介绍如何在 Phaser.js 中监听和处理游戏手柄的输入&#xff0c;帮助开发者为他…...

HTML5系列(13)-- 微数据与结构化数据指南

前端技术探索系列&#xff1a;HTML5 微数据与结构化数据指南 &#x1f4ca; 致读者&#xff1a;探索数据语义化的世界 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 HTML5 微数据与结构化数据&#xff0c;学习如何让网页内容更易被搜索引擎理解和解析。 微数…...

MAA ADB问题

模拟器官方MUMU12 连接设置 | MaaAssistantArknights 参考文档&#xff0c;找谷歌platform ADB&#xff0c;放入MAA文件夹 选择谷歌ADB&#xff0c;选择MUMU12的ADB代码 MuMu 模拟器 12 127.0.0.1:16384 重新连接 ok...

基于VTX356语音识别合成芯片的智能语音交互闹钟方案

一、方案概述 本方案旨在利用VTX356语音识别合成芯片强大的语音处理能力&#xff0c;结合蓝牙功能、APP或小程序&#xff0c;打造一款功能全面且智能化程度高的闹钟产品。除了基本的时钟显示和闹钟提醒功能外&#xff0c;还拥有正计时、倒计时、日程安排、重要日提醒以及番茄钟…...

大语言模型应用开发框架LangChain

大语言模型应用开发框架LangChain 一、LangChain项目介绍1、简介2、LangChain的价值3、实战演练 二、LangChain提示词大语言模型应用1、简介1.1、提示词模板化的优点1.2、提示词模板LLM 的应用1.3、Prompt 2、应用实战2.1、PromptTemplate LLM2.2、PromptTemplate LLM Outpu…...

php7.4安装pg扩展-contos7

今天接到一个需求&#xff0c;就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说&#xff0c;直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…...

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

网络安全防护指南:筑牢网络安全防线(5/10)

一、网络安全的基本概念 &#xff08;一&#xff09;网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代&#xff0c;网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...

集合框架(2)List

Collection的子接口&#xff1a;List、Set 1、List接口 鉴于Java中数组用来存储数据的局限性&#xff0c;我们通常使用java.util.List替代数组List集合类中元素有序、且可重复&#xff0c;集合中的每个元素都有其对应的顺序索引。JDK API中List接口的实现类常用的有&#xff…...

12.5作业

1.完成指针的练习 1.已知数组a[10]和b[10]中元素的值递增有序&#xff0c;用指针实现将两个数组中的元素按递增的顺序输出。 ex: int arr[5]{1,3,5,7,9}; int arr1[5]{2,4,6,8,10}; 程序结束后输出1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&am…...

61 基于单片机的小车雷达避障及阈值可调

所有仿真详情导航&#xff1a; PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机&#xff0c;采用超声波传感器检测距离&#xff0c;通过LCD1602显示屏显示&#xff0c;三个按键&#xff0c;第一个按键是…...

116. UE5 GAS RPG 实现击杀掉落战利品功能

这一篇&#xff0c;我们实现敌人被击败后&#xff0c;掉落战利品的功能。首先&#xff0c;我们将创建一个新的结构体&#xff0c;用于定义掉落体的内容&#xff0c;方便我们设置掉落物。然后&#xff0c;我们实现敌人死亡时的掉落函数&#xff0c;并在蓝图里实现对应的逻辑&…...

原子类相关

原子引用 JUC 并发包提供了&#xff1a; AtomicReferenceAtomicMarkableReferenceAtomicStampedReference AtomicReference 使用举例 public interface DecimalAccount {// 获取余额BigDecimal getBalance();// 取款void withdraw(BigDecimal amount);/*** 方法内会启动 10…...

DeCoOp: Robust Prompt Tuning with Out-of-Distribution Detection

文章汇总 me&#xff1a;看得很迷糊 新型检测器 M D \mathcal M_D MD​的训练是为了对一个子基类去划分子基类中的base和new。 在获得每个子基类之后&#xff0c;为每个检测器训练子分类器 M C \mathcal M_C MC​ 在推理时&#xff0c;如果最高得分的检测器 M D i ( x ) \ma…...

Tinker热修复框架详解:Android应用补丁生成,提升应用稳定性

Tinker 是腾讯开源的Android热修复框架&#xff0c;通过动态更新和修复应用中的代码、资源和本地库文件&#xff0c;无需用户重新安装 APK&#xff0c;便可以及时修复应用中的 bug&#xff0c;优化用户体验。 下面是Tinker在Android项目中的详细用法&#xff0c;结合Kotlin 代…...

手写—— netty 实现 rabbitMq客户端

要使用 Netty 实现一个 RabbitMQ 客户端&#xff0c;你可以将 RabbitMQ 协议封装在 Netty 中&#xff0c;通过自定义编码和解码来实现与 RabbitMQ 的通信。RabbitMQ 使用 AMQP (Advanced Message Queuing Protocol) 协议&#xff0c;因此我们需要创建合适的协议封装和处理逻辑。…...

调用高德地图天气查询api

之前使用的api一直用不了&#xff0c;才发现web端类型的没有天气查询功能 web服务才有 然后在linux的环境变量中配置一下 发现linux中配的环境变量不行&#xff0c;于是给输入amap_weather给的字典明文token。 # 选用RolePlay 配置agent from modelscope_agent.agents.role_p…...

【Vulkan入门】03-创建Device

目录 先叨叨git信息关键代码VulkanEnv::CreateDevice() 编译并运行程序题外话 先叨叨 在上篇已经选择了一个合适的PhysicalDevice。 本篇要为这个PhysicalDevice创将一个Device。Device可以理解为APP与PhysicalDevice之间的代理。 所有APP与PhysicalDevice之间交互的资源都通过…...

【Axios】如何在Vue中使用Axios请求拦截器

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

query did not return a unique result: 2;

文章目录 错误原因分析关键位置可能原因解决方法1. 检查数据库数据2. 修改查询方法3. 限定查询返回唯一结果4. 检查业务逻辑 总结 1、LoginLogRepository2、LoginLogService3、LoginLogApiService4、MyAuthenticationSuccessHandler 微信小程序开发者工具控制台报错 {"tim…...

PHP升级

PHP升级CentOs8 wget http://rpms.famillecollet.com/enterprise/remi-release-8.rpm rpm -ivh remi-release-8.rpm --nodeps --force rpm -qa | grep remi dnf module list php dnf module enable php:remi-7.4首先&#xff0c;重置当前的 PHP 模块&#xff0c;以便清理所有已…...

C++设计模式(原型、代理、适配器、组合)

一、原型模式 1.定义 用原型实例指定创建对象的种类&#xff0c;并且通过拷贝这些原型创建新的对象。 原型模式允许通过复制现有的对象来创建新对象&#xff0c;而不是通过实例化类来创建。这种方式可以避免创建重复的对象&#xff0c;从而提高性能和降低内存消耗。 2.组成 …...

超详细搭建PhpStorm+PhpStudy开发环境

刚开始接触PHP开发&#xff0c;搭建开发环境是第一步&#xff0c;网上下载PhpStorm和PhpStudy软件&#xff0c;怎样安装和激活就不详细说了&#xff0c;我们重点来看一看怎样搭配这两个开发环境。 前提&#xff1a;现在假设你已经安装完PhpStorm和PhpStudy软件。 我的PhpStor…...

Axure RP在智慧农场可视化大屏系统设计中的应用

随着科技的飞速发展&#xff0c;智慧农业已成为现代农业的重要发展方向。智慧农场可视化大屏系统作为智慧农业的重要组成部分&#xff0c;正逐步成为农场管理、决策和展示的核心工具。Axure RP&#xff0c;作为一款强大的原型设计工具&#xff0c;其在智慧农场可视化大屏系统的…...

《嵌入式硬件设计》

一、引言 嵌入式系统在现代科技中占据着至关重要的地位&#xff0c;广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础&#xff0c;直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面&#xff…...

【C语言篇】C 语言总复习(上):点亮编程思维,穿越代码的浩瀚星河

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 在计算机科学的广袤宇宙中&#xff0c;C语言犹如一颗璀璨的恒星&#xff0c;散发着持久而耀眼的光芒。它作为一种基础且强大的编程语言&#xff0c;承载…...

多线程——04

本节目标 1. wait 和 notify 方法 2. 代码案例 1. wait 和 notify 方法 1. 方法使用 多个线程的执行顺序本身是随机的&#xff08;抢占式执行&#xff09; wait —— 让指定线程进入阻塞状态 notify —— 唤醒对应的阻塞状态的线程 注意&#xff1a; wait, notify, notifyAl…...

使用ECS和OSS搭建个人网盘

在linux服务器 一、下载cloudreve安装包。 执行如下命令&#xff0c;下载cloudreve安装包。 wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/cloudreve_3.3.1_linux_amd64.tar.gz 下载完毕后&#xff0c;执行如下命令&#xff0c;解压cloudreve安装包。 tar -zxvf c…...