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

《Python星球日记》 第64天:NLP 概述与文本预处理

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》
创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)

目录

    • 一、NLP 简介
      • 1. 什么是自然语言处理?
        • NLP 的应用场景:
      • 2. 文本数据的特点与挑战
    • 二、文本预处理
      • 1. 分词
      • 2. 去停用词
      • 3. 词干提取与词形还原
      • 4. 特殊符号处理与正则表达式
    • 三、工具库介绍
      • 1. NLTK (Natural Language Toolkit)
      • 2. spaCy
      • 3. jieba(中文分词)
    • 四、代码练习:文本预处理实战
      • 1. 英文文本预处理
      • 2. 中文文本预处理
      • 3. 结合spaCy的高级预处理
    • 五、小结与拓展
      • 拓展学习方向
      • 练习建议

👋 专栏介绍: Python星球日记专栏介绍(持续更新ing)
上一篇: 《Python星球日记》 第63天:文本方向综合项目(新闻分类)

大家好,欢迎来到Python星球的第64天!🪐

一、NLP 简介

1. 什么是自然语言处理?

自然语言处理(Natural Language Processing,简称 NLP)是人工智能和计算语言学的交叉学科,致力于让计算机理解、解释和生成人类语言。简单来说,NLP 就是让计算机能够"读懂"和"说出"人类语言的技术。

在这里插入图片描述

想象一下当你对手机说"今天天气怎么样",手机能回答你今天天气情况并给出建议;当你用中文写一段话,计算机能将其翻译成英文;当你发一条评论,系统能判断你的情感倾向——这些都是 NLP 的应用。

NLP 的应用场景:
  • 机器翻译:将一种语言自动翻译成另一种语言(如 Google 翻译)
  • 情感分析:判断文本表达的情感倾向(如社交媒体舆情监测)
  • 问答系统:自动回答用户提出的问题(如 Siri、小度、ChatGPT)
  • 文本摘要:自动生成长文本的简短摘要
  • 语音识别:将语音转换为文本
  • 文本生成:根据给定提示生成连贯文本
  • 命名实体识别:识别文本中的人名、地名、组织名等专有名词

在这里插入图片描述

2. 文本数据的特点与挑战

处理文本数据与处理数值数据有很大不同,它具有以下特点与挑战

  • 非结构化:文本数据通常没有预定义的格式或结构
  • 歧义性:同一句话可能有多种解释(“我看见河里的鳄鱼吃掉了一条船”——是谁吃了船?)
  • 上下文依赖:词语含义依赖于上下文("苹果"可以是水果也可以是科技公司)
  • 语言多样性:全球有数千种语言,每种都有其独特规则和结构
  • 文化背景:理解需要文化背景知识(如俚语、谚语、文化典故)
  • 噪声问题:网络文本常包含错别字、缩写和不规范表达
  • 稀疏性:特征空间巨大但大多数特征在特定文本中不出现

处理这些挑战,我们需要一系列预处理技术来将原始文本转化为计算机可以理解和分析的形式。

在这里插入图片描述

二、文本预处理

文本预处理是 NLP 任务的基础环节,它将原始文本转换为机器可以有效处理的形式。这一步做得好坏,直接影响后续分析的质量。

在这里插入图片描述

1. 分词

分词(Tokenization)是将文本分割成基本单位(词语、字符或子词)的过程。这看似简单,实际上因语言而异,难度各不相同。

  • 英文分词:英文通常以空格和标点为界,相对简单

    # 英文分词示例
    sentence = "I love natural language processing!"
    tokens = sentence.split()  # 简单方法
    print(tokens)  # ['I', 'love', 'natural', 'language', 'processing!']
    
  • 中文分词:中文没有明显的词语边界,分词更具挑战性

    # 中文分词需要专门的工具
    import jieba
    sentence = "我爱自然语言处理"
    tokens = jieba.cut(sentence)
    print(list(tokens))  # ['我', '爱', '自然语言', '处理']
    

在这里插入图片描述

不同的分词方法会影响后续处理的效果。例如,将"自然语言处理"分为"自然/语言/处理"或"自然语言/处理"会带来不同的语义理解。

2. 去停用词

停用词(Stop Words)是在文本中频繁出现但对分析意义不大的词,如"的"、“是”、“在”(中文)或"the"、“is”、“and”(英文)。去除这些词可以减少噪声,提高分析效率。

# 英文去停用词示例
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenizesentence = "The quick brown fox jumps over the lazy dog"
tokens = word_tokenize(sentence.lower())
stop_words = set(stopwords.words('english'))
filtered_tokens = [word for word in tokens if word not in stop_words]
print(filtered_tokens)  # ['quick', 'brown', 'fox', 'jumps', 'lazy', 'dog']

3. 词干提取与词形还原

英文单词有各种变化形式(如动词时态、名词单复数),为了统一分析,我们需要将它们还原为基本形式。

  • 词干提取(Stemming):通过删除词缀来获得词根,算法简单但可能产生非词汇单词

    # 词干提取示例
    from nltk.stem import PorterStemmerstemmer = PorterStemmer()
    words = ["jumping", "jumps", "jumped", "runner", "running"]
    stemmed = [stemmer.stem(word) for word in words]
    print(stemmed)  # ['jump', 'jump', 'jump', 'runner', 'run']
    
  • 词形还原(Lemmatization):将单词还原为其词典形式(词元),考虑语法规则,结果更准确

    # 词形还原示例
    from nltk.stem import WordNetLemmatizerlemmatizer = WordNetLemmatizer()
    words = ["better", "running", "ate", "children"]
    lemmatized = [lemmatizer.lemmatize(word) for word in words]
    print(lemmatized)  # ['better', 'running', 'ate', 'child']# 指定词性可提高准确率
    print(lemmatizer.lemmatize("better", pos='a'))  # good
    print(lemmatizer.lemmatize("running", pos='v'))  # run
    print(lemmatizer.lemmatize("ate", pos='v'))  # eat
    

4. 特殊符号处理与正则表达式

文本中常包含各种特殊符号、HTML标签、URL等,这些通常需要清理。正则表达式是处理这类问题的强大工具。

# 使用正则表达式清理文本
import retext = "Please visit https://www.example.com! #NLP #Python"# 移除URL
text_no_url = re.sub(r'https?://\S+', '', text)
print(text_no_url)  # "Please visit ! #NLP #Python"# 移除标点符号
text_no_punct = re.sub(r'[^\w\s]', '', text)
print(text_no_punct)  # "Please visit httpswwwexamplecom NLP Python"# 移除数字
text_no_digits = re.sub(r'\d+', '', text)
print(text_no_digits)  # "Please visit https://www.example.com! #NLP #Python"

常用的正则表达式模式:

  • \w - 匹配字母、数字、下划线
  • \s - 匹配空白字符
  • \d - 匹配数字
  • [...] - 匹配方括号内的任意字符
  • ^ - 在方括号内表示"非"
  • + - 匹配前面的字符一次或多次
  • * - 匹配前面的字符零次或多次

在这里插入图片描述

三、工具库介绍

在NLP实践中,我们不需要从零开始实现所有预处理功能,可以借助强大的工具库。下面介绍三个常用的NLP工具库:

在这里插入图片描述

1. NLTK (Natural Language Toolkit)

NLTK是Python中最经典的NLP库,提供了丰富的语料库和预处理工具,特别适合教学和研究。

主要功能

  • 分词、词干提取、词形还原
  • 词性标注、解析树
  • 强大的语料库资源
  • 情感分析、文本分类工具
# NLTK基本使用示例
import nltk
# 首次使用需下载资源
# nltk.download('punkt')
# nltk.download('stopwords')
# nltk.download('wordnet')from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizertext = "Natural language processing helps computers communicate with humans!"# 分词
tokens = word_tokenize(text)
print("分词结果:", tokens)# 去停用词
stop_words = set(stopwords.words('english'))
filtered_tokens = [word for word in tokens if word.lower() not in stop_words]
print("去停用词后:", filtered_tokens)# 词形还原
lemmatizer = WordNetLemmatizer()
lemmatized = [lemmatizer.lemmatize(word) for word in filtered_tokens]
print("词形还原后:", lemmatized)

2. spaCy

spaCy是一个现代化、高性能的NLP库,专为生产环境设计,处理速度快,API简洁。

主要功能

  • 高效的分词和语法分析
  • 命名实体识别
  • 词向量支持
  • 多语言支持
  • 易于集成的管道处理
# spaCy基本使用示例
import spacy# 加载英文模型(首次使用需下载:python -m spacy download en_core_web_sm)
nlp = spacy.load('en_core_web_sm')text = "Apple is looking at buying U.K. startup for $1 billion"
doc = nlp(text)# 分词和词性标注
for token in doc:print(f"{token.text}: {token.pos_} ({token.pos})")# 命名实体识别
print("\n命名实体:")
for ent in doc.ents:print(f"{ent.text}: {ent.label_}")

3. jieba(中文分词)

jieba是处理中文文本的首选工具,提供了精确、全模式和搜索引擎模式三种分词模式。

主要功能

  • 中文分词
  • 关键词提取
  • 词性标注
  • 支持自定义词典
# jieba基本使用示例
import jieba
import jieba.posseg as psegtext = "我爱北京天安门,天安门上太阳升"# 精确模式分词
seg_list = jieba.cut(text, cut_all=False)
print("精确模式:", "/".join(seg_list))# 全模式分词
seg_list = jieba.cut(text, cut_all=True)
print("全模式:", "/".join(seg_list))# 搜索引擎模式
seg_list = jieba.cut_for_search(text)
print("搜索引擎模式:", "/".join(seg_list))# 词性标注
words = pseg.cut(text)
for word, flag in words:print(f"{word}: {flag}")

四、代码练习:文本预处理实战

让我们通过一个完整的实例,将前面学习的内容应用到实践中,分别处理英文和中文文本。

1. 英文文本预处理

下面是一个英文文本预处理的完整示例,包含了分词、去停用词、词形还原和简单的数据分析:

import nltk
import re
import matplotlib.pyplot as plt
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from collections import Counter# 确保下载必要的NLTK资源
# nltk.download('punkt')
# nltk.download('stopwords')
# nltk.download('wordnet')def preprocess_english_text(text):"""对英文文本进行预处理"""# 转为小写text = text.lower()# 清理特殊字符和数字text = re.sub(r'[^a-zA-Z\s]', '', text)# 分词tokens = word_tokenize(text)# 去停用词stop_words = set(stopwords.words('english'))filtered_tokens = [word for word in tokens if word not in stop_words]# 词形还原lemmatizer = WordNetLemmatizer()lemmatized = [lemmatizer.lemmatize(word) for word in filtered_tokens]return lemmatized# 示例英文文本
english_text = """
Natural Language Processing (NLP) is a field of artificial intelligence that focuses on the interaction 
between computers and humans through natural language. The ultimate objective of NLP is to read, 
decipher, understand, and make sense of human languages in a valuable way. NLP combines computational 
linguistics—rule-based modeling of human language—with statistical, machine learning, and deep learning models.
"""# 应用预处理
processed_tokens = preprocess_english_text(english_text)
print("处理后的标记:", processed_tokens[:20])# 统计词频
word_freq = Counter(processed_tokens)
print("\n最常见的10个词:")
for word, count in word_freq.most_common(10):print(f"{word}: {count}")# 可视化词频(如果在Jupyter Notebook中运行)
plt.figure(figsize=(10, 6))
common_words = [word for word, count in word_freq.most_common(10)]
word_counts = [count for word, count in word_freq.most_common(10)]
plt.bar(common_words, word_counts)
plt.title('最常见的10个词')
plt.xlabel('词语')
plt.ylabel('频率')
plt.xticks(rotation=45)
plt.tight_layout()
# plt.show()  # 在Jupyter中取消注释

2. 中文文本预处理

下面是一个中文文本预处理的示例,使用jieba分词库:

import jieba
import re
from collections import Counter
import matplotlib.pyplot as plt# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsedef preprocess_chinese_text(text):"""对中文文本进行预处理"""# 清理特殊字符text = re.sub(r'[^\u4e00-\u9fa5]', '', text)  # 仅保留中文字符# 分词seg_list = jieba.cut(text, cut_all=False)# 去停用词 (这里使用一个简单的停用词列表示例)stop_words = {'的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'}filtered_tokens = [word for word in seg_list if word not in stop_words and len(word) > 1]  # 过滤单字词return filtered_tokens# 示例中文文本
chinese_text = """
自然语言处理(NLP)是计算机科学、人工智能和语言学的交叉学科,致力于使计算机能够理解、处理和生成人类语言。
NLP技术被广泛应用于机器翻译、情感分析、智能客服、文本摘要等领域。随着深度学习的发展,自然语言处理技术取得了
巨大进步,特别是预训练模型如BERT和GPT的出现,使计算机对人类语言的理解能力大幅提升。
"""# 应用预处理
processed_tokens = preprocess_chinese_text(chinese_text)
print("处理后的标记:", processed_tokens)# 统计词频
word_freq = Counter(processed_tokens)
print("\n最常见的10个词:")
for word, count in word_freq.most_common(10):print(f"{word}: {count}")# 可视化词频
plt.figure(figsize=(10, 6))
common_words = [word for word, count in word_freq.most_common(10)]
word_counts = [count for word, count in word_freq.most_common(10)]
plt.bar(common_words, word_counts)
plt.title('最常见的10个词')
plt.xlabel('词语')
plt.ylabel('频率')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

在这里插入图片描述
在这里插入图片描述

3. 结合spaCy的高级预处理

spaCy提供了更强大的预处理能力,特别是在命名实体识别和句法分析方面:

import spacy
from collections import Counter
import matplotlib.pyplot as plt# 加载spaCy英文模型
# 首次使用需下载模型:python -m spacy download en_core_web_sm
nlp = spacy.load('en_core_web_sm')def preprocess_with_spacy(text):"""使用spaCy进行文本预处理"""doc = nlp(text)# 提取词语(去除停用词和标点符号)tokens = [token.lemma_ for token in doc if not token.is_stop and not token.is_punct]# 提取命名实体entities = [(ent.text, ent.label_) for ent in doc.ents]# 提取名词短语noun_phrases = [chunk.text for chunk in doc.noun_chunks]return {'tokens': tokens,'entities': entities,'noun_phrases': noun_phrases}# 示例文本
text = """
Google and Microsoft are investing billions in AI research. The CEO of OpenAI, Sam Altman, 
announced a new partnership with Apple in San Francisco last week. Natural language processing 
technology is transforming how we interact with computers.
"""# 应用spaCy预处理
results = preprocess_with_spacy(text)# 打印结果
print("词语:", results['tokens'])
print("\n命名实体:")
for entity, label in results['entities']:print(f"{entity}: {label}")
print("\n名词短语:", results['noun_phrases'])# 分析依存关系(可以帮助理解句法结构)
doc = nlp(text)
print("\n依存关系分析:")
for token in list(doc)[:10]:  # 仅显示前10个词的依存关系print(f"{token.text} --({token.dep_})--> {token.head.text}")

五、小结与拓展

今天我们学习了自然语言处理的基础概念和文本预处理技术,包括分词、去停用词、词干提取、词形还原以及特殊符号处理等。我们还介绍了三个常用的NLP工具库:NLTK、spaCy和jieba,并通过代码示例展示了如何处理英文和中文文本。

文本预处理只是NLP的第一步,但它是至关重要的一步。高质量的预处理可以显著提升后续NLP任务的性能。在实际应用中,预处理步骤通常需要根据具体任务和数据特点进行调整。

拓展学习方向

如果你对NLP感兴趣,可以继续探索以下方向:

  • 文本特征提取:TF-IDF、词袋模型、N-gram等
  • 词向量:Word2Vec、GloVe、FastText等词嵌入技术
  • 深度学习在NLP中的应用:RNN、LSTM、Transformer架构等
  • 预训练语言模型:BERT、GPT、ERNIE等模型的使用与微调
  • 应用实践:情感分析、文本分类、命名实体识别等具体任务

在这里插入图片描述

练习建议

  1. 尝试对自己收集的英文或中文文本进行预处理,观察不同预处理步骤的效果
  2. 比较NLTK、spaCy和jieba在处理相同任务时的表现差异
  3. 将预处理后的文本用于简单的NLP任务,如文本分类或情感分析
  4. 尝试使用正则表达式解决实际文本清洗问题,如提取电子邮件、清理HTML标签等

随着学习的深入,你会发现NLP是一个既广阔又深邃的领域,今天所学的预处理技术是你探索这个领域的重要基石。继续前进,下一步我们将学习如何从预处理后的文本中提取有意义的特征,并应用于更高级的NLP任务中。


祝你学习愉快,Python星球的探索者!👨‍🚀🌠

创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊)
如果你对今天的内容有任何问题,或者想分享你的学习心得,欢迎在评论区留言讨论!

相关文章:

《Python星球日记》 第64天:NLP 概述与文本预处理

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、NLP 简介1. 什么是自然语言处理?NLP 的应用场景: 2.…...

Java中堆栈

文章目录 Java中堆栈1. 栈(Stack)特点示例 2. 堆(Heap)特点示例 3. 核心区别4. 常见问题5. 内存可视化示例内存布局示意图: 总结 Java中堆栈 在 Java 中,“堆栈” 通常指的是堆(Heap&#xff0…...

模块化PCB设计中联排半孔的应用

随着电子产品的快速发展,高密度、多功能和小型化已成为未来的趋势。电路板上的元件几何指数在增加,而PCB尺寸却越来越小,因此需要与支撑板做配合。如果用助焊剂将圆孔焊接到母板上,由于圆孔体积较大,会产生冷焊&#x…...

xss-lab靶场4-7关基础详解

前言&#xff1a; 仅作为练习&#xff0c;复盘 推荐html在线运行平台&#xff0c;弹窗标签可以在平台运行&#xff0c;看语句是否能正常弹窗 HTML/CSS/Javascript在线代码运行工具 | 菜鸟教程 内容&#xff1a; 第四关 打开一看&#xff0c;输入<script>alert(1)&l…...

【Linux】进程状态、优先级、切换和调度

目录 一、传统操作系统进程状态 &#xff08;一&#xff09;什么是状态 &#xff08;二&#xff09;运行状态 &#xff08;三&#xff09;阻塞状态 &#xff08;四&#xff09;挂起状态 二、Linux进程状态 &#xff08;一&#xff09;进程状态 &#xff08;二&#xff…...

软件测试基础知识详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、黑盒测试、白盒测试、灰盒测试 1.1 黑盒测试 黑盒测试 又叫 功能测试、数据驱动测试 或 基于需求规格说明书的功能测试。该类测试注重于测试软件的功能性需…...

【WordPress博客AI内容辅助生成/优化工具箱插件下载无标题】

主要功能 AI内容生成/优化 使用AI模型生成或优化段落内容 支持撤销和模型切换 AI自动评论 智能分析文章内容生成相关评论 可配置的评论数量和随机调度 生成评论回复的概率(评论数>10时) 可能以特定概率包含表情符号 AI标签提取 从文章内容自动提取相关标签 新标签可自动生…...

js 画立方体软件开发日记2

我不懂但我大为震惊 重开几次又回去了 这说明之前的操作无效 搞了个调试当前文件 导出模块有问题&#xff0c;跑显示没事 启动太慢&#xff0c;重构吧 ----------------------------------------------- 把那些鬼相机投影代码删了就有4s了 按钮全删了&#xff0c;还是卡&…...

element plus el-table多选框跨页多选保留

一、基础多选配置 通过 type“selection” 开启多选列&#xff0c;并绑定 selection-change 事件获取选中数据 <template><el-table :data"tableData" selection-change"handleSelectionChange"><el-table-column type"selection&qu…...

智能家居“心脏“升级战:GD25Q127CSIG国产芯片如何重构家庭物联生态

在智能家居设备出货量突破10亿台的2023年&#xff0c;家庭网关正经历着前所未有的技术革新。作为连接云端与终端设备的中枢神经&#xff0c;智能网关的存储芯片选择直接决定着整个智能生态系统的运行效率。在这场技术升级浪潮中&#xff0c;兆易创新GD25Q127CSIG串行闪存芯片主…...

智能枪弹柜管理系统|智能枪弹柜管理系统LK-QDG-Q20型

是一种用于存放枪支弹药的智能化设备&#xff0c;主要应用于涉枪单位&#xff0c;以下将从其功能特点、系统组成、优势等维度展开介绍&#xff1a; 功能特点 身份识别功能&#xff1a;采用多种生物识别技术&#xff0c;如指纹识别、指静脉识别、虹膜识别、人脸识别、声纹识别等…...

bootstrap table 添加跳转到指定页的功能(仅自己可见)

Table回调方法中&#xff0c;添加input和button至Table下方&#xff08;Table页渲染结束后执行&#xff09; &#xff08;input用来输入页码&#xff0c;button执行跳转&#xff09; function ajaxRequestExtends(data){$(".page-list").append("<input idp…...

rufus+Ubuntu 18.04 镜像

参考&#xff1a;https://blog.csdn.net/Li060703/article/details/106075597 Rufus 官网&#xff1a; https://rufus.ie/zh/ 步骤 安装U盘做好后插在主板io的USB口上&#xff0c;启动阶段用F2或DEL打断进bios&#xff0c;bios里面指定从安装U盘来启动&#xff0c;里面的B…...

基于事件驱动和策略模式的差异化处理方案

一、支付成功后事件驱动 1、支付成功事件 /*** 支付成功事件** author ronshi* date 2025/5/12 14:40*/ Getter Setter public class PaymentSuccessEvent extends ApplicationEvent {private static final long serialVersionUID 1L;private ProductOrderDO productOrderDO;…...

【运维】MacOS蓝牙故障排查与修复指南

在日常使用macOS系统过程中&#xff0c;蓝牙连接问题时有发生。无论是无法连接设备、连接不稳定还是蓝牙功能完全失效&#xff0c;这些问题都会严重影响我们的工作效率。本文将分享一些实用的排查方法和修复技巧&#xff0c;帮助你解决macOS系统上的蓝牙故障。 问题症状 常见…...

linux小主机搭建自己的nas(三)docker安装nextcloud

小主机用的TF卡&#xff0c;不可能把nas的数据放在卡上&#xff0c;所以我买了个2T的移动硬盘 1.挂载移动硬盘 查找硬盘 lsblk # 或 fdisk -l 创建挂载点 sudo mkdir -p alon_ssd 查看硬盘文件系统,文件系统类型一会儿设置挂载用 sudo blkid /dev/sda1 开机自动挂载&…...

Go语言:json 作用和语法

在 Go 语言中&#xff0c;JSON 字段&#xff08;也称为 JSON Tag&#xff09;是附加在结构体字段上的元数据&#xff0c;用于控制该字段在 JSON 编码&#xff08;序列化&#xff09;和解码&#xff08;反序列化&#xff09; 时的行为。它的语法是&#xff1a; type StructName…...

mageia系统详解

Mageia 是一个由社区驱动的 Linux 发行版&#xff0c;源自 Mandriva Linux&#xff08;原 Mandrake Linux&#xff09;&#xff0c;以用户友好性和强大的系统工具著称。它继承了 Mandriva 的易用性传统&#xff0c;同时专注于稳定性和社区协作。以下从历史背景、技术架构、系统…...

六、STM32 HAL库回调机制详解:从设计原理到实战应用

STM32 HAL库回调机制详解&#xff1a;从设计原理到实战应用 一、回调机制的本质与设计目标 在STM32 HAL库中&#xff0c;回调机制是实现异步事件处理的核心设计模式。它通过弱定义函数用户重写的方式&#xff0c;将硬件事件&#xff08;如数据传输完成、定时器溢出等&#xf…...

USB传输模式

USB有四种传输模式: 控制传输, 中断传输, 同步传输, 批量传输 1. 中断传输 中断传输一般用于小批量, 非连续的传输. 对实时性要求较高. 常见的使用此传输模式的设备有: 鼠标, 键盘等. 要注意的是, 这里的 “中断” 和我们常见的中断概念有差异. Linux中的中断是设备主动发起的…...

lenis滑动插件的笔记

官网 lenis - npm 方法一&#xff1a;基础判断&#xff08;推荐&#xff09; 通过 Lenis 自带的 scroll 和 limit 属性直接判断&#xff1a; const lenis new Lenis()// 滚动事件监听 lenis.on(scroll, ({ scroll, limit }) > {const distanceToBottom limit - scroll…...

【网络安全】SQL注入

如果文章不足还请各位师傅批评指正&#xff01; 想象一下&#xff0c;你经营着一家咖啡店&#xff0c;顾客可以通过店内的点单系统下单。这个系统会根据顾客的输入&#xff0c;向后厨发送指令&#xff0c;比如“为顾客A准备一杯拿铁”。 然而&#xff0c;如果有个不怀好意的顾客…...

window server 2012安装sql server2008 r2

执行sql server2008 r2安装目录下的setup 选择运行程序而不获取帮助 然后就是让人绝望的 只能先搞这个了&#xff0c;F*微软&#xff0c;自家软件不让正常安装 打开服务器管理器->添加角色和功能->选择Web 服务&#xff08;IIS&#xff09;->添加.NET Framework3.5 然…...

uni-app学习笔记五--vue3插值表达式的使用

vue3快速上手导航&#xff1a;简介 | Vue.js 模板语法 插值表达式 最基本的数据绑定形式是文本插值&#xff0c;它使用的是“Mustache”语法 (即双大括号)&#xff1a; <span>Message: {{ msg }}</span> 双大括号标签会被替换为相应组件实例中 msg 属性的值。同…...

RuoYi 中使用 PageUtils.startPage() 实现分页查询的完整解析

文章目录 一、PageHelper 简介与基本用法使用方式如下&#xff1a; 二、Mapper 接口返回类型对分页的影响1. 返回 Page<T> 类型&#xff08;推荐&#xff09;2. 返回 List<T> 类型&#xff08;不推荐&#xff09; 三、解析RuoYi 是如何使用 PageUtils.startPage()1…...

【番外】02:Windows 编译带 DNN_CUDA 功能的 OpenCV 动态链接库

文章目录 1. 环境准备2. 兼容性说明3. 算力查询4. 编译步骤5. 网盘资料 提示&#xff1a; 如果读者因网络环境受限&#xff0c;无法正常下载与本文相关的软件安装包、压缩包&#xff0c;以及编译时的依赖文件&#xff0c;可以从文章最后提供的网盘链接下载资源。 1. 环境准备 …...

Java详解LeetCode 热题 100(14):LeetCode 56. 合并区间(Merge Intervals)详解

文章目录 1. 题目描述2. 理解题目3. 解法一&#xff1a;排序 一次遍历法3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景 4. 解法二&#xff1a;双指针法4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 与解法一的比较 5. 解法三&#xff1a;TreeMa…...

回答 | 图形数据库neo4j社区版可以应用小型企业嘛?

刚在知乎上看到了一个提问&#xff0c;挺有意思&#xff0c;于是乎&#xff0c;贴到这里再简聊一二。 转自知乎提问 当然可以&#xff0c;不过成本问题不容小觑。另外还有性能上的考量。 就在最近&#xff0c;米国国家航空航天局——NASA因为人力成本问题&#xff0c;摒弃了使…...

2024年北理工Python123第六章测验题整理

测验题一般不会太难&#xff0c;但是这次的题目&#xff0c;未免太多了&#xff0c;有的还很难 一、选择题 二、编程题 1-10 列表和字符串 1-10都是和列表、字符串有关的题目&#xff0c;都很简单,我直接给出代码了 1.列表排序输出 import random random.seed(int(input()…...

常用的设计模式详解

常用的设计模式详解 在后端开发中&#xff0c;设计模式是提升代码可维护性、扩展性和灵活性的关键工具。通过合理应用设计模式&#xff0c;开发者能够高效解决复杂问题并优化系统架构。本文将结合实际案例&#xff0c;深入探讨后端开发中常用的设计模式及其核心应用场景。 一、…...

OFCMS代码审计-freemaker注入sql注入xxexss文件上传

环境搭建 下载地址&#xff1a;https://gitee.com/oufu/ofcms/repository/archive/V1.1.2?formatzip SSTI模板注入&#xff08;freemaker) FreeMarker模板注入实现远程命令执行 - Eleven_Liu - 博客园 在admin中找到这个 发现请求的是这个 找到他 <#assign value"f…...

python与nodejs哪个性能高

在一般的Web开发和高并发场景中&#xff0c;Node.js的性能通常优于Python&#xff0c;特别是在处理大量异步任务和实时应用时更具优势&#xff1b;而在数据分析、机器学习及计算密集型任务中&#xff0c;Python则表现出更高的性能优势。 Node.js以事件驱动的非阻塞I/O模型著称&…...

云平台管理部署知识点——问题+答案

1、在k8s 中定义副本数量的关键字是那个&#xff1f;处于那个模块下&#xff1f; 关键字&#xff1a;replicas 模块&#xff1a;spec下 2、在k8s中&#xff0c;有状态应用和无状态应用的区别&#xff1f;创建有状态和无状态应用分别使用哪种资源对象类型&#xff1f; &#…...

数据结构(六)——树和二叉树

一、树和二叉树的定义与存储 1.树的定义 树是一种非线性的数据结构&#xff0c;它是由n个有限结点组成有层次关系的集合 树具有以下特点&#xff1a; &#xff08;1&#xff09;每个结点具有0个或多个子结点 &#xff08;2&#xff09;每个子结点只有一个父结点 &#xff…...

基于构件的开发方法与传统开发方法的区别

在软件开发领域,基于构件的开发方法和传统开发方法有着截然不同的特点与应用效果,这些差异显著影响着项目的实施过程与最终成果。下面,我们将从多个关键维度展开对比分析。​ 一、开发模式:线性搭建与模块组装​ 传统开发方法遵循线性的、自顶向下的流程,就像搭建一座高楼…...

cursor对话关键词技巧

提示词基本结构与原则 一个好的 Cursor 提示词通常包含三个部分&#xff1a;目标说明 上下文信息 具体要求。 例如&#xff1a; 创建一个React登录组件&#xff0c;使用Tailwind CSS样式&#xff0c;需要包含邮箱验证功能和记住密码选项。 效果演示&#xff1a; 提示词的的…...

克隆虚拟机组成集群

一、克隆虚拟机 1. 准备基础虚拟机 确保基础虚拟机已安装好操作系统&#xff08;如 Ubuntu&#xff09;、Java 和 Hadoop。关闭防火墙并禁用 SELinux&#xff08;如适用&#xff09;&#xff1a; bash sudo ufw disable # Ubuntu sudo systemctl disable firewalld # CentO…...

添加购物车-02.代码开发

一.代码开发 购物车属于用户端功能&#xff0c;因此要在user下创建controller代码。 Controller层 package com.sky.controller.user;import com.sky.dto.ShoppingCartDTO; import com.sky.entity.ShoppingCart; import com.sky.result.Result; import com.sky.service.Shopp…...

2094. 找出 3 位偶数

from typing import Listclass Solution:def findEvenNumbers(self, digits: List[int]) -> List[int]:# 统计 digits 中每个数字&#xff08;0-9&#xff09;的出现次数。cnt [0] * 10for d in digits:cnt[d] 1ans []# i0 百位&#xff0c;i1 十位&#xff0c;i2 个位&a…...

外出充电不发愁,倍思便携式移动电源成出行新宠

电子设备已深度融入现代快节奏生活&#xff0c;成为出行必备。但随之而来的电量焦虑&#xff0c;却始终困扰着人们。无论是出差远行、户外探索&#xff0c;还是每日通勤&#xff0c;如何随时为设备充电&#xff0c;成了亟待解决的难题。倍思极客充伸缩数据线充电宝应运而生&…...

防火墙安全策略基础配置

拓朴图 设备基础配置 # AR1 路由器配置 [Huawei]interface GigabitEthernet0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 1.1.1.2 255.255.255.0 [Huawei]ip route-static 192.168.1.0 255.255.255.0 1.1.1.1# FW1 防火墙配置 [USG6000V1]sysname FW1 [FW1]interface Gigab…...

系统架构-通信系统架构设计

通信网络系统架构 局域网 单一机构所拥有的专用计算机网络 局域网从早期只提供二层交换功能的简单网络发展到现在&#xff0c;还提供三层路由功能的复杂网络 局域网的典型架构风格&#xff1a; 单核心架构&#xff1a;由一台核心二层或三层交换设备充当网络的核心设备&…...

2.3 定积分

一、数学定义与核心公式 核心思想&#xff1a; 定积分是通过无限细分区间、累加微小矩形面积来逼近曲边图形面积的数学工具。其本质是极限过程下的误差控制与动态平衡。 公式与符号解析&#xff1a; 表达式&#xff1a;定积分写作 ∫ₐᵇ f(x)dx&#xff0c;表示在区间 [a, …...

TCPIP详解 卷1协议 八 ICMPv4和ICMPv6 Internet控制报文协议

8.1——ICMPv4和ICMPv6 Internet控制报文协议 IP 协议本身并没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包。此外&#xff0c;IP 没有提供直接的方式来获取诊断信息&#xff08;例如&#xff0c;哪些路由器在沿途中被使用了或使用一种方法来估计往返时间…...

ik 分词器 设置自定义词典

进入 ES 的安装目录&#xff0c;进入 /elasticsearch-8.10.0/plugins/ik/config/ 文件夹目录&#xff0c;打开 IKAnalyzer.cfg.xml 文件进行配置。 一、添加 自定义扩展词典 扩展词&#xff1a;就是不想哪些词分开&#xff0c;让他们成为一个词&#xff0c;比如“蒙的全是对…...

RabbitMQ 工作模式

RabbitMQ 一共有 7 中工作模式&#xff0c;可以先去官网上了解一下&#xff08;一下截图均来自官网&#xff09;&#xff1a;RabbitMQ 官网 Simple P&#xff1a;生产者&#xff0c;要发送消息的程序&#xff1b;C&#xff1a;消费者&#xff0c;消息的接受者&#xff1b;hell…...

sqlmap使用入门

sqlmap加速了sql注入的发展&#xff0c;需要掌握6点&#xff0c;其一是--dbs获得数据库名称&#xff0c;其二是-D 数据库名称 --tables 获得数据库中的所有表名&#xff0c;其三是-D 数据库名 -T 表名 -C 字段1,字段2 --dump 获得数据库中的表中的字段的值&#xff0c;其四是-r…...

C++23 中的 views::stride:让范围操作更灵活

文章目录 什么是 views::stride语法与用法参数与返回值实现细节适用场景编译器支持总结 什么是 views::stride views::stride 是 C23 引入的一个范围适配器。它允许我们从一个范围中以固定步长提取元素&#xff0c;从而生成一个新的范围视图。具体来说&#xff0c;给定一个范围…...

OSI 7层模型

OSI 7层模型&#xff1a; 1、物理层&#xff08;光纤等把电脑连接起来的物理手段&#xff09; 2、数据链路层&#xff08;以太网&#xff0c;确认0和1电信号的分组方式&#xff0c;负责MAC地址&#xff0c;MAC地址用于在网络中唯一标示一个网卡&#xff0c;相当于网卡的身份证…...

向量组的维度是单个向量中元素的个数

在线性代数中&#xff0c;向量组的维数通常指的是单个向量中元素的个数&#xff0c;即每个向量的维度&#xff08;dimension&#xff09;。例如&#xff0c;一个由三维几何向量&#xff08;如 ( x , y , z ) (x, y, z) (x,y,z)&#xff09;组成的向量组&#xff0c;其维数是3&…...