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

【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界

随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成简明扼要的文本摘要,帮助用户快速获取关键信息。近年来,基于深度学习的预训练语言模型,尤其是BERT(Bidirectional Encoder Representations from Transformers),在文本理解和生成任务中取得了显著进展。本文深入探讨了如何利用Python和BERT模型进行文本摘要,包括数据预处理、模型构建与训练、摘要生成及结果评估等环节。首先,介绍了文本摘要的基本概念及其在实际应用中的重要性。随后,详细阐述了BERT模型的架构及其在文本摘要任务中的应用原理。接着,通过实际案例,展示了如何使用Python进行数据清洗与预处理,并利用Hugging Face的Transformers库构建和训练基于BERT的文本摘要模型。文章还涵盖了生成摘要的具体方法,包括抽取式和生成式摘要技术,并结合代码示例进行详细说明。最后,探讨了模型评估指标及优化策略,旨在为研究人员和开发者提供一套完整的基于BERT的文本摘要解决方案,助力其在信息提取与内容生成领域的创新与实践。

引言

在当今信息爆炸的时代,海量的文本数据如新闻报道、学术论文、社交媒体内容等以惊人的速度涌现。如何高效地从这些海量数据中提取关键信息,成为了自然语言处理(NLP)领域的重要研究方向之一。文本摘要作为NLP中的核心任务,旨在自动生成简明扼要的文本摘要,帮助用户快速获取所需信息,提升信息处理的效率和效果。

传统的文本摘要方法主要分为抽取式摘要和生成式摘要两类。抽取式摘要通过从原文中直接提取关键句子或片段来构建摘要,而生成式摘要则尝试理解原文内容,生成新的句子来表达核心信息。随着深度学习技术的迅猛发展,基于神经网络的文本摘要方法逐渐成为研究热点,尤其是预训练语言模型的应用,为文本摘要任务带来了革命性的突破。

BERT(Bidirectional Encoder Representations from Transformers)作为一种基于Transformer架构的双向编码器表示模型,自推出以来在多个NLP任务中表现出色。其强大的语义理解能力使其在文本摘要任务中具备巨大的潜力。然而,如何有效地利用BERT进行文本摘要,包括数据预处理、模型构建与训练、摘要生成及结果评估,仍然是一个值得深入探讨的问题。

本文旨在系统地介绍如何使用Python和BERT模型进行文本摘要任务。通过详细的理论解析与丰富的代码示例,展示从数据预处理到模型训练,再到摘要生成的完整流程。同时,探讨模型评估与优化策略,帮助读者全面掌握基于BERT的文本摘要技术,推动其在实际应用中的落地与创新。

BERT模型概述

Transformer架构

Transformer架构由Vaswani等人于2017年提出,是一种完全基于注意力机制(Attention Mechanism)的神经网络模型,广泛应用于各种NLP任务。与传统的循环神经网络(RNN)相比,Transformer具有更高的并行化能力和更好的长距离依赖建模能力。Transformer主要由编码器(Encoder)和解码器(Decoder)两部分组成,每部分由多个相同的层(Layer)堆叠而成。

每个编码器层包含两个子层:多头自注意力机制(Multi-Head Self-Attention)和前馈全连接网络(Feed-Forward Neural Network)。每个解码器层则在此基础上增加了一个编码器-解码器注意力机制(Encoder-Decoder Attention)。这种设计使得Transformer在处理序列到序列(Sequence-to-Sequence)任务时表现尤为出色。

BERT模型

BERT(Bidirectional Encoder Representations from Transformers)是Google于2018年提出的预训练语言模型,基于Transformer的编码器部分。BERT的核心创新在于其双向性,即在进行词表示学习时同时考虑左右上下文信息,这一特性显著提升了模型的语义理解能力。

BERT通过两个主要任务进行预训练:掩蔽语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)。MLM任务随机掩蔽输入句子中的一些词汇,模型需根据上下文预测被掩蔽的词;NSP任务则要求模型判断两句话是否在原文中相邻。这两种任务共同训练出具有深厚语义理解能力的语言表示。

BERT在文本摘要中的应用

在文本摘要任务中,BERT可以作为编码器,用于理解输入文本的语义信息。结合解码器部分,BERT可以被扩展为生成式摘要模型。此外,基于BERT的预训练模型,如BERTSUM,通过调整模型结构和训练目标,专门用于摘要生成,取得了良好的效果。

然而,直接使用BERT进行文本摘要存在一些挑战,包括生成的摘要质量、模型的训练效率以及对大规模数据的适应能力。本文将探讨如何通过数据预处理、模型构建与训练、摘要生成等步骤,充分发挥BERT在文本摘要任务中的潜力。

数据预处理

数据集选择

文本摘要任务需要大量的带有摘要的文本对作为训练数据。常用的数据集包括:

  1. CNN/Daily Mail:包含新闻文章及其摘要,广泛用于文本摘要任务。
  2. DUC:由美国国家标准与技术研究院(NIST)组织的文档理解评估会议提供的数据集。
  3. Gigaword:包含大量的新闻摘要数据,适用于训练大规模摘要模型。

本文以CNN/Daily Mail数据集为例,展示数据预处理的具体步骤。

数据清洗与格式化

数据预处理的主要目的是将原始数据转化为模型可以接受的格式,包括去除噪声、统一文本格式、分割训练与测试集等。以下是具体的代码实现:

import os
import re
import json
import pandas as pd
from tqdm import tqdm# 定义数据集路径
DATA_DIR = 'cnn_dm_dataset'
TRAIN_FILE = os.path.join(DATA_DIR, 'train.json')
VALID_FILE = os.path.join(DATA_DIR, 'valid.json')
TEST_FILE = os.path.join(DATA_DIR, 'test.json')# 检查数据文件是否存在
for file in [TRAIN_FILE, VALID_FILE, TEST_FILE]:if not os.path.exists(file):raise FileNotFoundError(f'文件 {file} 不存在,请检查数据集路径。')# 加载数据
def load_data(file_path):"""加载JSON格式的数据参数:file_path -- 数据文件路径返回:texts -- 原文列表summaries -- 摘要列表"""texts = []summaries = []with open(file_path, 'r', encoding='utf-8') as f:for line in tqdm(f, desc=f'加载 {file_path}'):data = json.loads(line)text = data['article']summary = data['highlights']texts.append(text)summaries.append(summary)return texts, summaries# 加载训练、验证和测试集
train_texts, train_summaries = load_data(TRAIN_FILE)
valid_texts, valid_summaries = load_data(VALID_FILE)
test_texts, test_summaries = load_data(TEST_FILE)# 数据示例
print(f'训练集样本数: {len(train_texts)}')
print(f'验证集样本数: {len(valid_texts)}')
print(f'测试集样本数: {len(test_texts)}')# 数据清洗函数
def clean_text(text):"""清洗文本数据,去除特殊字符和多余空格参数:text -- 输入文本返回:清洗后的文本"""# 去除特殊字符text = re.sub(r'[^A-Za-z0-9\s,.!?\'\"-]', '', text)# 替换多个空格为一个空格text = re.sub(r'\s+', ' ', text)return text.strip()# 清洗所有数据
train_texts = [clean_text(text) for text in tqdm(train_texts, desc='清洗训练集')]
valid_texts = [clean_text(text) for text in tqdm(valid_texts, desc='清洗验证集')]
test_texts = [clean_text(text) for text in tqdm(test_texts, desc='清洗测试集')]train_summaries = [clean_text(summary) for summary in tqdm(train_summaries, desc='清洗训练集摘要')]
valid_summaries = [clean_text(summary) for summary in tqdm(valid_summaries, desc='清洗验证集摘要')]
test_summaries = [clean_text(summary) for summary in tqdm(test_summaries, desc='清洗测试集摘要')]# 将清洗后的数据保存为CSV文件,便于后续处理
def save_to_csv(texts, summaries, file_name):"""将文本和摘要保存为CSV文件参数:texts -- 原文列表summaries -- 摘要列表file_name -- 输出文件名"""df = pd.DataFrame({'text': texts, 'summary': summaries})df.to_csv(file_name, index=False, encoding='utf-8')print(f'已保存到 {file_name}')# 保存数据
save_to_csv(train_texts, train_summaries, 'train_clean.csv')
save_to_csv(valid_texts, valid_summaries, 'valid_clean.csv')
save_to_csv(test_texts, test_summaries, 'test_clean.csv')

数据分词与编码

在使用BERT进行文本摘要任务之前,需要对文本进行分词和编码。BERT使用WordPiece分词器,将词汇拆分为更小的子词单元,以处理未登录词和多样化的词汇形式。以下是具体的实现代码:

from transformers import BertTokenizer# 加载预训练的BERT分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')# 定义最大序列长度
MAX_INPUT_LENGTH = 512
MAX_SUMMARY_LENGTH = 128# 分词和编码函数
def tokenize_and_encode(texts, summaries, tokenizer, max_input_len=MAX_INPUT_LENGTH, max_summary_len=MAX_SUMMARY_LENGTH):"""对文本和摘要进行分词和编码参数:texts -- 原文列表summaries -- 摘要列表tokenizer -- BERT分词器max_input_len -- 原文最大长度max_summary_len -- 摘要最大长度返回:input_ids -- 原文的编码attention_masks -- 原文的注意力掩码summary_ids -- 摘要的编码summary_attention_masks -- 摘要的注意力掩码"""input_ids = []attention_masks = []summary_ids = []summary_attention_masks = []for text, summary in tqdm(zip(texts, summaries), total=len(texts), desc='分词和编码'):# 编码原文encoded_dict = tokenizer.encode_plus(text,add_special_tokens=True,max_length=max_input_len,padding='max_length',truncation=True,return_attention_mask=True,return_tensors='pt')input_ids.append(encoded_dict['input_ids'])attention_masks.append(encoded_dict['attention_mask'])# 编码摘要summary_encoded = tokenizer.encode_plus(summary,add_special_tokens=True,max_length=max_summary_len,padding='max_length',truncation=True,return_attention_mask=True,return_tensors='pt')summary_ids.append(summary_encoded['input_ids'])summary_attention_masks.append(summary_encoded['attention_mask'])# 将列表转换为张量input_ids = torch.cat(input_ids, dim=0)attention_masks = torch.cat(attention_masks, dim=0)summary_ids = torch.cat(summary_ids, dim=0)summary_attention_masks = torch.cat(summary_attention_masks, dim=0)return input_ids, attention_masks, summary_ids, summary_attention_masksimport torch# 进行分词和编码
train_inputs, train_masks, train_summaries_ids, train_summaries_masks = tokenize_and_encode(train_texts, train_summaries, tokenizer
)
valid_inputs, valid_masks, valid_summaries_ids, valid_summaries_masks = tokenize_and_encode(valid_texts, valid_summaries, tokenizer
)
test_inputs, test_masks, test_summaries_ids, test_summaries_masks = tokenize_and_encode(test_texts, test_summaries, tokenizer
)# 查看编码结果
print('原文编码示例:', train_inputs[0])
print('摘要编码示例:', train_summaries_ids[0])

构建数据加载器

为了高效地将数据输入模型进行训练,需要构建适当的数据加载器。以下代码展示了如何使用PyTorch的DatasetDataLoader类进行数据封装:

from torch.utils.data import Dataset, DataLoaderclass SummarizationDataset(Dataset):"""自定义数据集类,用于文本摘要任务"""def __init__(self, input_ids, attention_masks, summary_ids, summary_attention_masks):self.input_ids = input_idsself.attention_masks = attention_masksself.summary_ids = summary_idsself.summary_attention_masks = summary_attention_masksdef __len__(self):return len(self.input_ids)def __getitem__(self, idx):return {'input_ids': self.input_ids[idx],'attention_mask': self.attention_masks[idx],'summary_ids': self.summary_ids[idx],'summary_attention_mask': self.summary_attention_masks[idx]}# 创建数据集对象
train_dataset = SummarizationDataset(train_inputs, train_masks, train_summaries_ids, train_summaries

相关文章:

【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...

WHAT - Rust 智能指针

文章目录 常见的智能指针类型1. Box<T> — 堆上分配的数据2. Rc<T> — 引用计数的共享所有权&#xff08;单线程&#xff09;3. Arc<T> — 原子引用计数&#xff08;多线程&#xff09;4. RefCell<T> — 运行时可变借用&#xff08;单线程&#xff09;…...

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1(Client端)

这里我们来实现这个RPC的client端 为了实现RPC的效果&#xff0c;我们调用的Hello方法&#xff0c;即server端的方法&#xff0c;应该是由代理来调用&#xff0c;让proxy里面封装网络请求&#xff0c;消息的发送和接受处理。而上一篇文章提到的服务端的代理已经在.rpc.go文件中…...

CentOS 安装 Zellij 终端复用器教程

CentOS 安装 Zellij 终端复用器教程 简介 Zellij 是一个现代化的终端复用器&#xff0c;使用 Rust 语言编写。它提供了类似 tmux 的功能&#xff0c;但具有更友好的用户界面和更现代化的特性。本教程将详细介绍如何在 CentOS 7.9 系统上安装 Zellij。 前置条件 CentOS 7.9 …...

基于 SpringBoot + Vue 的校园管理系统设计与实现

一、项目简介 本系统以校园组织管理为主线&#xff0c;结合用户权限分离机制与模块化设计&#xff0c;实现对“单位类别、单位、通知推送、投票信息、用户回复”等内容的全流程管理&#xff0c;广泛适用于教育局、高校及下属组织的信息管理工作。 &#x1f3af; 项目亮点&…...

如何减少锁竞争并细化锁粒度以提高 Rust 多线程程序的性能?

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种常用的同步机制&#xff0c;用于保护共享数据免受多个线程同时访问造成的竞态条件&#xff08;Race Condition&#xff09;。然而&#xff0c;不合理的锁使用会导致严重的性能瓶颈&#xff0c;特别是在高并发场景…...

【人工智能agent】--dify通过mcp协议调用工具

MCP Client 发起工具调用的实体&#xff0c;也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口&#xff08;工具节点&#xff09;来请求服务。 MCP Server / Host 提供实际服务的端点。在这个例子中&#xff0c;就是模拟 API 服务器 上的各个API (/api/pump/st…...

Review --- Redis

Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的&#xff0c;key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库&#xff08;存储一些简单的数据&#xff0c;例如新闻点赞量&#xff09;&#xff0c;**缓存&#xff08;秒…...

Sql刷题日志(day8)

一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string&#xff1a;要操作的字符串。length&#xff1a;要从右侧提取的字符数 */ 2、curdate():返回当前日期&#xff0c;格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈&#xff0c;因…...

【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络

(导读 ) 人工智能对计算性能需求剧增&#xff0c;电子微处理器发展受功耗限制。光学计算有望解决这些问题&#xff0c;光学神经网络&#xff08;ONNs&#xff09;成为研究热点&#xff0c;但现有 ONNs 因设计缺陷&#xff0c;在图像分类任务中精度远低于现代电子神经网络&#…...

2025-05-07 Unity 网络基础8——UDP同步异步通信

文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 ​ 客户端和服务端的流程如下&#xff1a; 创建套接字 Socket。用 Bind() 方法将套…...

K8S - 金丝雀发布实战 - Argo Rollouts 流量控制解析

一、金丝雀发布概述 1.1 什么是金丝雀发布&#xff1f; 金丝雀发布&#xff08;Canary Release&#xff09;是一种渐进式部署策略&#xff0c;通过逐步将生产流量从旧版本迁移至新版本&#xff0c;结合实时指标验证&#xff0c;在最小化风险的前提下完成版本迭代。其核心逻辑…...

手持小风扇方案解说---【其利天下技术】

春去夏来&#xff0c;酷暑时节&#xff0c;小风扇成为外出必备的解暑工具&#xff0c;近年来&#xff0c;随着无刷电机的成本急剧下降&#xff0c;小风扇也逐步从有刷变无刷化了。 数量最大的如一箱无刷马达&#xff0c;其次三相低压无刷电机也大量被一些中高端风扇大量采用。…...

Qt开发:枚举的介绍和使用

文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM&#xff08;Qt 5.5 及以上&#xff09;3.2 示例&#xff1a;枚举值转字符串3.4 示例&#xff1a;字符串转枚举值 四、枚举与字符串相互转换五、枚…...

HarmonyOS运动开发:如何集成百度地图SDK、运动跟随与运动公里数记录

前言 在开发运动类应用时&#xff0c;集成地图功能以及实时记录运动轨迹和公里数是核心需求之一。本文将详细介绍如何在 HarmonyOS 应用中集成百度地图 SDK&#xff0c;实现运动跟随以及运动公里数的记录。 一、集成百度地图 SDK 1.引入依赖 首先&#xff0c;需要在项目的文…...

“胖都来”商标申请可以通过注册不!

近日“胖都来”被网友认为是蹭“胖东来”品牌流量在互联网上引起争议&#xff0c;看到许多自媒体说浙江这家公司已拿到“胖都来”的注册商标&#xff0c;普推知产商标老杨经检索后发现是没有的&#xff0c;只是申请受理。 对于商城类主要类别是在35类广告销售&#xff0c;核心是…...

【Django】中间件

Django 中间件是 Django 框架里一个轻量级、可插拔的组件&#xff0c;它能在全局范围内对 Django 的请求和响应进行处理。中间件处于 Django 的请求处理流程之中&#xff0c;在请求抵达视图函数之前以及视图函数返回响应之后执行特定操作。以下是关于 Django 中间件的详细介绍&…...

电子电器架构 --- 48V架构的一丢丢事情

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

什么是Blender?怎么获取下载Blender格式文件模型

glbxz.com glbxz.com 官方可以下载Blender格式文件模型 BlenderBlender 是一个免费的开源程序&#xff0c;用于建模和动画&#xff0c;最初由一家名为 Neo Geo 的动画工作室作为内部应用程序开发&#xff0c;后来作为自己的程序发布。这是一个称职的程序&#xff0c;近年来由于…...

Ubuntu安装pgsql

​​一、通过 APT 安装&#xff08;推荐&#xff09;​​ 更新软件包列表 sudo apt update 安装 PostgreSQL 核心包及工具 sudo apt install postgresql postgresql-client postgresql-contrib • postgresql&#xff1a;数据库服务端 • postgresql-client&#xff1a;命令行…...

Qwen2-VL详解

一、引言 在人工智能领域,多模态大模型的发展备受关注。Qwen2-VL 作为一款先进的多模态模型,致力于克服现有方法在处理图像和视频数据时存在的不足,显著提升多模态信息的理解与交互能力。本文将全面且深入地阐述 Qwen2-VL 的创新理念、精妙的模型架构、严谨的训练流程、卓越…...

定长滑动窗口---初阶篇

目录 滑动窗口核心思想 定长滑动窗口套路 定长滑动窗口习题剖析 1456. 定长子串中元音的最大数目 643. 子数组最大平均数 I 1343. 大小为 K 且平均值大于等于阈值的子数组数目 2090. 半径为 k 的子数组平均值 2379. 得到 K 个黑块的最少涂色次数 2841. 几乎唯一子数组…...

以pytest_addoption 为例,讲解pytest框架中钩子函数的应用

钩子函数&#xff08;Hook Function&#xff09;的概念 钩子函数&#xff08;Hook Function&#xff09;是软件框架中预定义的回调接口&#xff0c;允许开发者在程序执行的特定阶段插入自定义逻辑&#xff0c;以扩展或修改框架的默认行为。在 pytest 中&#xff0c;钩子函数覆…...

数据智能重塑工业控制:神经网络在 MPC 中的四大落地范式与避坑指南

一、引言&#xff1a;工业控制的范式革命 在工业 4.0 的浪潮中&#xff0c;传统基于物理模型的控制方法&#xff08;如 PID、线性二次型调节器 LQR&#xff09;正面临前所未有的挑战。以石化行业为例&#xff0c;某炼油厂的催化裂化装置&#xff08;FCCU&#xff09;因反应机理…...

AB测试面试题

AB测试面试题 常考AB测试问答题(1)AB测试的优缺点是什么?(2)AB测试的一般流程/介绍一下日常工作中你是如何做A/B实验的?(3)第一类错误 vs 第二类错误 vs 你怎么理解AB测试中的第一、二类错误?(4)统计显著=实际显著?(5)AB测试效果统计上不显著?(6)实验组优于对…...

phpstudy升级新版apache

1.首先下载要升级到的apache版本&#xff0c;这里apache版本为Apache 2.4.63-250207 Win64下载地址&#xff1a;Apache VS17 binaries and modules download 2.将phpstudy中原始apache复制备份Apache2.4.39_origin 3.将1中下载apache解压&#xff0c; 将Apache24复制一份到ph…...

民宿管理系统6

普通管理员管理&#xff1a; 新增普通管理员&#xff1a; 前端效果&#xff1a; 前端代码&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…...

【iOS】源码阅读(三)——内存对齐原理

文章目录 前言获取内存大小的三种常用方式sizeofclass_getInstanceSizemalloc_size 总结 前言 之前学习alloc相关源码&#xff0c;涉及到内存对齐的相关内容&#xff0c;今天笔者详细学习了一下相关内容并写了此篇博客。 获取内存大小的三种常用方式 获取内存大小的方式有很多…...

在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录

需求目标 所有认证用户可访问 Samba 共享目录 /path/to/home&#xff1b;**仅特定用户&#xff08;如 developer&#xff09;**拥有写权限&#xff1b;其他用户仅允许读取&#xff1b;禁止匿名访问。 配置步骤 1. 设置文件系统权限 将目录 /home3/guest 的所有权设为 develo…...

配置指定地址的conda虚拟Python环境

创建指定路径的 Conda 环境 在创建环境时&#xff0c;使用 --prefix 参数指定自定义路径&#xff1a; conda create --prefix/your/custom/path/my_env python3.8 说明&#xff1a; /your/custom/path/my_env&#xff1a;替换为你希望存放环境的路径&#xff08;如 D:\projec…...

从彼得·蒂尔四象限看 Crypto「情绪变迁」:从密码朋克转向「标准化追求者」

作者&#xff1a;Techub 精选编译 撰文&#xff1a;Matti&#xff0c;Zee Prime Capital 编译&#xff1a;Yangz&#xff0c;Techub News 我又带着一篇受彼得蒂尔&#xff08;Peter Thiel&#xff09;启发的思想杂烩回来了。作为自封的「蒂尔学派」信徒&#xff0c;我常透过他…...

VS Code 常用插件

React Auto Import - ES6, TS, JSX, TSX Auto Rename Tag ES7 React/Redux/React-Native snippets Markdown Markdown All in One Markdown Preview Enhanced Other Prettier - Code formatter 格式化代码 Live Server 本地服务器实时预览与自动刷新...

深入探讨 UDP 协议与多线程 HTTP 服务器

深入探讨 UDP 协议与多线程 HTTP 服务器 一、UDP 协议&#xff1a;高效但“不羁”的传输使者 UDP 协议以其独特的特性在网络传输中占据一席之地&#xff0c;适用于对实时性要求高、能容忍少量数据丢失的场景。 1. UDP 的特点解析 无连接&#xff1a;无需提前建立连接&…...

Node.js入门指南:开启JavaScript全栈开发之旅

Hi&#xff0c;我是布兰妮甜 &#xff01;Node.js让JavaScript突破了浏览器的限制&#xff0c;成为全栈开发的利器。作为基于V8引擎的高性能运行时&#xff0c;它彻底改变了JavaScript只能做前端开发的局面。本文将带你快速掌握Node.js的核心用法&#xff1a;环境搭建与模块系统…...

【STM32F1标准库】理论——通信协议:串口

目录 一、简介 二、连接方式 三、串口参数与时序 1.参数 2.时序 四、STM32实现串口通信的方法 1.使用软件模拟 2.使用硬件外设 杂谈 1.通信的目的 2.常见可以使用串口通信的模块 3.串口常用电平标准 4.串口从波形反推数据 5.奇偶校验 一、简介 命名&#xff1a;USART&#…...

轻松管理房间预约——启辰智慧预约小程序端使用教程

欢迎您使用《启辰智慧预约》场所预约小程序&#xff0c;您可以通过本小程序预约会议室/活动室等&#xff0c;并在预约审批通过后&#xff0c;获取临时开锁密码&#xff0c;开锁密码会在预约时间前30分钟生效。以下是本程序的使用流程。 一、创建单位&#xff08;新用户注册&am…...

如何在自己的服务器上部署静态网页并通过IP地址进行访问

文件放置 cd /var目录 新建www目录 进入www目录 新建html目录用于放置文件以及相关资源 修改配置文件 sudo nano /etc/nginx/sites-available/default修改index部分的html文件名 修改端口映射避免80冲突 重启Nginx sudo systemctl restart nginx打开浏览器访问即可 h…...

802.11s Mesh 组网框架流程

协议标准 使用 802.11s (标准 Mesh 协议) 基础流程框架 连接流程本质&#xff1a;Beacon → Peer Link → HWMP 路径发现 → 数据传输。mesh与easymesh的区别 阶段详解 阶段1:Beacon广播 作用&#xff1a;周期性宣告Mesh网络存在&#xff0c;同步参数&#xff08;如Mesh …...

gitcode 上传文件报错文件太大has exceeded the limited size (10 MiB) in commit

登陆gitcoe&#xff0c;在项目设置->提交设置 ,勾选提交文件限制&#xff0c;修改限制的大小。 修改完后&#xff0c;重新提交代码。...

C++代码随想录刷题知识分享-----判断两个字符串是否为字母异位词(Anagram)【LeetCode 242】

✨ 题目描述 给定两个字符串 s 和 t&#xff0c;请判断 t 是否是 s 的字母异位词。 &#x1f4cc; 示例 1&#xff1a; 输入&#xff1a;s "anagram", t "nagaram" 输出&#xff1a;true&#x1f4cc; 示例 2&#xff1a; 输入&#xff1a;s "…...

Canal mysql to mysql 增加 online 库同步配置指南

Canal 增加新库 online 的配置指南 1. 停止 Canal Adapter 服务 ./bin/stop.sh2. 数据库备份与导入 备份源数据库 mysqldump -h 127.0.0.1 -P 3307 --single-transaction -uroot -p -B online > online.sql导入到目标数据库 mysql -h 127.0.0.1 -P 3308 -uroot -p <…...

Spring MVC中Controller是如何把数据传递给View的?

在 Spring MVC 中&#xff0c;Controller 负责请求的处理&#xff0c;准备需要展示的数据&#xff0c;并将这些数据传递给 View&#xff0c;由 View 负责最终的页面渲染。数据从 Controller 传递到 View 主要通过模型 (Model) 实现。 Spring MVC 提供了以下几种方式让 Control…...

FAST-LIO笔记

1.FAST-LIO FAST-LIO 是一个计算效率高、鲁棒性强的激光-惯性里程计系统。该系统通过紧耦合的迭代扩展卡尔曼滤波器&#xff08;IEKF&#xff09;将激光雷达特征点与IMU数据进行融合&#xff0c;使其在快速运动、噪声较大或环境复杂、存在退化的情况下仍能实现稳定的导航。 1…...

挑战用豆包教我学Java01天

今天是豆包教我学Java的第一天&#xff0c;废话不多说直接开始。 1.每日题目&#xff1a; 基础语法与数据类型 题目&#xff1a;编写一个 Java 程序&#xff0c;从控制台读取两个整数&#xff0c;然后计算它们的和、差、积、商&#xff0c;并输出结果。题目&#xff1a;编写…...

基于RT-Thread的STM32G4开发第二讲第二篇——ADC

文章目录 前言一、RT-Thread工程创建二、ADC工程创建三、ADC功能实现1.ADC.c2.ADC.h3.mian.c 四、效果展示和工程分享总结 前言 本文使用的是RT-Thread最新的驱动5.1.0&#xff0c;兼容下面的所有驱动。使用的开发板是蓝桥杯嵌入式国信长安的开发板&#xff0c;MCU是STM32G431…...

居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)

居民健康监测小程序 目录 基于微信小程序的居民健康监测小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、用户信息管理 2、健康科普管理 5.3公告类型管理 3、论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

电商双11美妆数据分析

图中展示的是在Jupyter Notebook环境下的Python代码及运行结果。代码利用 seaborn 和 matplotlib 库&#xff0c;以 datal 数据集为基础&#xff0c;绘制上下两个子图。上方子图呈现各店铺中各大类的销售量&#xff0c;下方子图展示各店铺中各大类的销售额&#xff0c;通过条形…...

Spark-Core(双Value类型)

一、RDD转换算子&#xff08;双Value类型&#xff09; 1、intersection 函数签名&#xff1a; def intersection(other: RDD[T]): RDD[T] 函数说明&#xff1a;对源 RDD 和参数 RDD 求交集后返回一个新的 RDD 举栗&#xff1a; val dataRDD1 sparkContext.makeRDD(List(…...

【数据库原理及安全实验】实验六 角色访问控制

指导书原文 安全性管理二 【实验目的】 1) 通过语句设置登录用户的权限&#xff0c;实现对不同用户的操作权限的限定。 【实验原理】 1) 定义数据库角色&#xff0c;授予该角色特定权限&#xff0c;建立不同的用户将其置入不同的角色之下&#xff0c;即等于分配了该用户不…...

windows安装micromamba

windows安装 winget install Mamba.Micromamba Set-ExecutionPolicy RemoteSigned micromamba activate 第一次运行会报错&#xff0c;把报错中间那一句init代码跑一下 创建环境什么的和conda一样 把conda换成micromamba就行 绑定快捷键&#xff0c;winget安装&#x…...