NLP学习路线图(十四):词袋模型(Bag of Words)

article/2025/8/11 11:00:32

在自然语言处理(NLP)的广阔天地中,词袋模型(Bag of Words, BoW) 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星,却为整个领域奠定了至关重要的基础,深刻影响了我们让计算机“理解”文本的方式。本文将深入探讨词袋模型的原理、实现、应用、局限及其在现代NLP中的深远影响。 

一、文本理解的困境与向量化曙光

计算机擅长处理结构化的数字和符号,但人类语言却是非结构化、高度灵活且充满歧义的。如何将一段文字(如“这部电影精彩绝伦,演员表演令人叹服!”)转化为计算机能够处理、分析的形式,是NLP面临的首要挑战。

核心需求在于表示(Representation):我们需要一种方法,将文本从字符序列转化为一种数学对象(通常是向量或矩阵),从而能够应用各种机器学习算法进行分类、聚类、检索等任务。

词袋模型应运而生,它提供了一种简单、直观且极其有效的文本向量化方法,其核心思想在于:

  1. 忽略顺序: 暂时抛弃词语在句子中出现的先后顺序。

  2. 忽略语法: 暂时不考虑词语之间的句法关系(如主谓宾)。

  3. 关注词频: 只关心文档中出现了哪些词,以及这些词出现了多少次。

想象一个袋子(Bag),你把文档中的所有词都扔进去,然后摇晃均匀。最后,你只关心袋子里有几种不同的词,以及每种词各有多少个。袋子里的词失去了原有的顺序和上下文关系,这就是“词袋”名字的由来。

二、词袋模型的核心机制:构建文本向量

词袋模型的实现是一个清晰的流程化操作:

  1. 分词(Tokenization):

    • 将原始文本分割成更小的单元,通常是单词(Word) 或词元(Token)。例如:

      • 句子:"The quick brown fox jumps over the lazy dog."

      • 分词结果:["The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog", "."] (通常标点符号会被移除或单独处理)。

  2. 构建词汇表(Vocabulary Construction):

    • 收集所有在训练语料库(用于构建模型的文档集合)中出现的唯一词(Unique Word),并按照某种规则(如字母顺序)排列,形成一个固定大小的列表。这就是模型的“词典”。

    • 例如,基于上述句子(假设语料库仅此一句),词汇表可能为:["brown", "dog", "fox", "jumps", "lazy", "over", "quick", "the"] (注意去除了重复的"the"和句点".")。词汇表大小V = 8。

  3. 向量化(Vectorization / Encoding):

    • 对于每一篇文档(Document),创建一个长度为V(词汇表大小)的向量。

    • 遍历词汇表中的每一个词:

      • 如果该词在当前文档中出现过,则在向量中该词对应的位置上,填入该词在文档中出现的次数(Count)

      • 如果该词没有出现,则填入0。

    • 这就是文档的词袋表示——一个词频向量(Term Frequency Vector)

实例演示:

考虑两个文档:

  • Doc1: "The cat sat on the mat."

  • Doc2: "The dog chased the cat."

步骤1:分词 & 预处理 (假设去除停用词'the', 'on'和标点)

  • Doc1 Tokens: ["cat", "sat", "mat"]

  • Doc2 Tokens: ["dog", "chased", "cat"]

步骤2:构建词汇表 (基于两个文档)

  • Vocabulary: ["cat", "chased", "dog", "mat", "sat"] (V=5, 按字母顺序)

步骤3:向量化

  • Doc1 Vector: 词汇表位置:

    • "cat" -> 出现1次 -> 1

    • "chased" -> 出现0次 -> 0

    • "dog" -> 出现0次 -> 0

    • "mat" -> 出现1次 -> 1

    • "sat" -> 出现1次 -> 1

    • 向量: [1, 0, 0, 1, 1]

  • Doc2 Vector:

    • "cat" -> 出现1次 -> 1

    • "chased" -> 出现1次 -> 1

    • "dog" -> 出现1次 -> 1

    • "mat" -> 出现0次 -> 0

    • "sat" -> 出现0次 -> 0

    • 向量: [1, 1, 1, 0, 0]

现在,原本是自然语言的Doc1Doc2,被转化成了计算机可以轻松处理的数值向量[1, 0, 0, 1, 1][1, 1, 1, 0, 0]。这些向量构成了后续机器学习模型的输入特征(Feature)。

 

三、关键概念与技术演进

  1. 词频(Term Frequency, TF): 词袋模型最基础的形式就是使用词频计数,如上例所示。它直接反映了词在文档中的重要性(通常,一个词在文档中出现的次数越多,它对文档主题的贡献可能越大)。

  2. 停用词(Stop Words):

    • 像“the”, “a”, “an”, “in”, “on”, “is”, “and”, “or”等词在几乎所有文档中都高频出现,但对区分文档内容几乎没有帮助,反而会增加噪声和计算负担。

    • 在构建词袋模型前,通常需要移除停用词。这能显著降低向量维度(词汇表大小V),提高模型效率,并可能提升下游任务(如分类)的准确性。移除停用词后的Doc1Doc2向量就是应用了此步骤的结果。

  3. 词干提取与词形还原(Stemming and Lemmatization):

    • 目标:将词语的不同形态(如复数、时态、比较级等)归并到其基本形式(词干Stem或词元Lemma)。

    • 词干提取(Stemming): 使用启发式规则(常会出错)粗暴地截取单词前缀。如:

      • “jumps”, “jumped”, “jumping” -> "jump"

      • “running” -> "run" (较好) / "runn" (可能,取决于算法)

    • 词形还原(Lemmatization): 利用词典和词性分析,返回单词的规范字典形式(Lemma)。如:

      • “is”, “am”, “are”, “been” -> "be"

      • “better” -> "good" (需知道它是形容词)

    • 作用: 减少词汇表大小(V),将语义相似的词(如“run”和“running”)映射到同一个特征上,避免因词形变化导致特征分散,增强模型泛化能力。例如,“I am running” 和 “He runs fast” 经过词形还原(run)后,都能体现“跑步”的概念。

  4. 逆文档频率(Inverse Document Frequency, IDF)与 TF-IDF:

    • 词频(TF)的局限性: 像“the”这样的词在很多文档中TF都很高,但它并不重要;而像“quantum”这样的词,即使在一个文档中TF不高,但如果它出现了,往往表明该文档讨论的是量子物理,这个信息非常重要。

    • IDF思想: 一个词在整个语料库(所有文档集合)中出现的文档越少(即越稀有),它包含的信息量就越大,对区分文档越有价值。

    • IDF 计算: IDF(t) = log(N / (df(t) + 1)) 其中:

      • N:语料库中文档总数。

      • df(t)(Document Frequency):包含词t的文档数量。

      • +1:平滑项,防止df(t)=0时除零错误。

      • log(通常取自然对数或log10):压缩IDF值的范围。

    • TF-IDF(Term Frequency-Inverse Document Frequency): 将TF和IDF结合起来,成为词袋模型最强大、最常用的加权方案。TF-IDF(t, d) = TF(t, d) * IDF(t)

    • 意义: TF-IDF值衡量了一个词t对于一个特定文档d的重要性。

      • d中TF高 -> 重要。

      • 在整个语料库中IDF高(即该词稀有)-> 重要。

      • 同时满足两者 -> 非常高的TF-IDF值,是该文档的强特征词。

    • 效果: 降低了常见词(高DF,低IDF)的权重,提升了稀有但重要的词(低DF,高IDF)的权重,显著改善了词袋表示的信息量和区分度,广泛应用于信息检索、文本分类等。

  5. N元语法(N-grams):

    • 词袋模型的根本局限: 完全丢失了词的顺序信息。“狗咬人”和“人咬狗”在词袋模型下向量完全相同。

    • N-gram 的引入: 将连续的N个词(或字)作为一个单元(Token)放入“袋子”。常用的是:

      • Unigram (1-gram): 单个词 (即标准词袋)。

      • Bigram (2-gram): 连续的两个词 (如 "quick brown", "brown fox")。

      • Trigram (3-gram): 连续的三个词 (如 "quick brown fox")。

    • 作用: 部分捕捉了局部词序信息和上下文。例如,“strong tea”和“strong support”中的“strong”含义不同,作为Unigram无法区分,但作为Bigram ("strong_tea" vs "strong_support") 则能很好地区分。

    • 代价: 词汇表大小V会急剧膨胀(从V个词到大约V^N个可能的N-gram),导致维度灾难(Curse of Dimensionality),增加存储和计算负担,并可能引入更多噪声。

四、词袋模型的应用场景

尽管简单,词袋模型(尤其是TF-IDF变体)凭借其有效性和可解释性,在诸多NLP任务中曾长期占据主导地位,至今仍在某些场景下发挥着重要作用:

  1. 文本分类(Text Classification):

    • 任务: 将文档分配到预定义的类别中(如新闻分类-体育/财经/娱乐;情感分析-正面/负面/中立;垃圾邮件检测)。

    • 应用: 词袋/TF-IDF向量作为文档特征输入到分类器(如朴素贝叶斯Naive Bayes、支持向量机SVM、逻辑回归Logistic Regression)中。高频词或高TF-IDF词往往能有效表征类别(如体育新闻中高频出现“比赛”、“球员”、“进球”等)。

  2. 情感分析(Sentiment Analysis):

    • 任务: 判断文本(如评论、微博)表达的情感倾向(积极、消极、中性)。

    • 应用: 积极词(“好”、“棒”、“喜欢”、“推荐”)和消极词(“差”、“烂”、“讨厌”、“失望”)通常具有较高的TF或TF-IDF值,并带有明显的类别区分性。基于词袋特征的分类器是传统情感分析的基石。例如,评论“画面精美,演员演技在线,剧情跌宕起伏”中,“精美”、“在线”、“跌宕起伏”等词的TF-IDF值会较高,并被分类器识别为积极信号。

  3. 信息检索(Information Retrieval, IR)与搜索引擎:

    • 任务: 根据用户查询(Query),从大规模文档集合中找到最相关的文档。

    • 应用: 词袋是布尔模型和向量空间模型(Vector Space Model, VSM)的核心。

      • 布尔模型: 查询被表示为关键词的布尔组合(AND/OR/NOT),文档表示为词的存在与否(1/0)。匹配规则简单直接。

      • 向量空间模型(VSM): 将查询和文档都表示为TF-IDF向量(通常在高维空间中)。文档d与查询q的相关性通过计算它们向量之间的余弦相似度(Cosine Similarity) 来衡量:cos(θ) = (d · q) / (||d|| * ||q||)。余弦相似度越高,相关性越强。这是早期搜索引擎排序的核心原理之一。当用户搜索“词袋模型原理”,搜索引擎会将查询转化为TF-IDF向量,并与索引中所有文档的TF-IDF向量计算余弦相似度,返回相似度最高的文档。

  4. 文档聚类(Document Clustering):

    • 任务: 将文档集合自动分组(聚类),使得同一组(簇)内的文档彼此相似,不同组的文档差异较大(无预先定义类别)。

    • 应用: 使用词袋/TF-IDF向量表示文档,应用聚类算法(如K-Means、层次聚类)。具有相似关键词分布(即向量在高维空间中距离相近)的文档会被聚到一起。例如,新闻聚合网站自动将讨论相似话题(如“世界杯”、“人工智能”、“股市波动”)的新闻归类。

  5. 主题建模(Topic Modeling)的基础:

    • 潜在语义分析(LSA/LSI) 和概率潜在语义分析(pLSA) 等经典主题模型,其输入通常就是文档-词项矩阵(Document-Term Matrix),这正是词袋模型(通常是TF-IDF加权)构建的矩阵(行是文档,列是词汇表中的词,值是TF或TF-IDF)。这些模型试图从词频共现模式中发现潜在的语义主题。

五、词袋模型的显著优势

  1. 概念简单直观: 核心思想易于理解,实现逻辑清晰。

  2. 实现容易高效: 算法流程明确,计算复杂度相对较低(主要是计数和查表),易于编程实现和并行化。使用scikit-learnCountVectorizerTfidfVectorizer,几行Python代码即可完成转换。

  3. 可解释性强: 特征直接对应词汇表中的词,TF-IDF值的高低直观反映了词在文档中的重要性,便于人类理解和调试模型。例如,在分类任务中,可以查看哪些词的权重对分类决策贡献最大。

  4. 作为强大的基线: 即使面对现代深度学习方法,一个精心调优的TF-IDF + 线性模型(如SVM、Logistic Regression)在中小规模数据集上的文本分类等任务中,依然能提供极具竞争力的结果,是评估新模型性能的重要基线(Baseline)。

  5. 特征工程的基础: 为更复杂的文本表示方法(如基于词袋的特征组合、特征选择)提供了起点。

六、词袋模型的内在局限与挑战

词袋模型的简单性也带来了不可避免的缺陷:

  1. 丢失词序与句法信息: 这是最根本的缺陷。“北京欢迎你”和“你欢迎北京”在词袋模型下完全相同,但语义迥异。无法捕捉短语结构、句子结构等关键语法信息。

  2. 忽略语义信息与上下文:

    • 一词多义(Polysemy): 同一个词在不同语境下有不同含义(如“苹果”指水果还是公司?)。词袋模型无法区分。

    • 同义词(Synonymy): 不同词可能有相同或相近含义(如“计算机”、“电脑”)。词袋模型将它们视为完全不同的特征,缺乏语义关联性。

    • 无法理解词语之间的语义关系(如反义、上下位、部分整体)。

  3. 高维稀疏性(High Dimensionality and Sparsity):

    • 词汇表大小V很容易达到数万甚至数十万(尤其在N-gram时)。每个文档向量长度等于V

    • 但单个文档包含的独特词数量远小于V,导致文档向量中绝大部分元素为0(稀疏向量)。这不仅造成巨大的存储和计算开销(维度灾难),也可能影响一些机器学习算法的性能。

  4. 词汇表外问题(Out-of-Vocabulary, OOV):

    • 模型基于训练语料库构建词汇表。对于新文档中出现但未在训练词汇表中的词(新词、拼写错误、罕见词),模型无法处理(只能标记为0或特殊符号),丢失信息。

  5. 无法处理词形变化与未登录词: 虽然词干提取/词形还原可以缓解,但无法完美解决,且可能引入错误。新词(如网络流行语)或专有名词也构成挑战。

  6. 权重计算的局限性: TF-IDF虽然有效,但仍是一种基于统计的启发式方法,未能真正捕捉深层次的语义关联。

七、超越词袋:现代NLP的演进

词袋模型的局限推动了NLP表示学习的发展,核心目标是获得低维、稠密、蕴含语义的向量表示:

  1. 词嵌入(Word Embedding):

    • 思想: 将词汇表中的每个词映射到一个固定长度的稠密实数向量(如50维、100维、300维)。

    • 核心: 分布式假设(Distributional Hypothesis)——“一个词的语义由其上下文决定”。出现在相似上下文中的词具有相似的语义。

    • 代表模型:

      • Word2Vec (Mikolov et al., 2013): 包含Skip-gram(用中心词预测上下文词)和CBOW(用上下文词预测中心词)两种结构。通过浅层神经网络训练得到词向量。king - man + woman ≈ queen 的经典例子展示了其捕捉语义关系的能力。

      • GloVe (Global Vectors for Word Representation, Pennington et al., 2014): 基于全局词-词共现统计信息(类似于词袋的共现矩阵),利用矩阵分解技术学习词向量。结合了全局统计和局部上下文信息。

    • 优势: 解决了词袋模型的稀疏性、OOV(可通过子词或字符级缓解)、语义关联性(同义词/近义词向量距离近)等问题。向量维度显著降低(如300维 vs 10万维词袋)。

  2. 上下文相关的词嵌入(Contextualized Word Embeddings):

    • 词嵌入的局限: 一个词在所有语境下只有一个固定向量表示,无法解决一词多义问题(“bank”在“河岸”和“银行”语境下应有不同表示)。

    • 突破:

      • ELMo (Embeddings from Language Models, Peters et al., 2018): 利用双向LSTM语言模型,根据词的上下文生成动态词向量。同一个词在不同句子中会得到不同的向量表示。

      • Transformer 架构 (Vaswani et al., 2017): 基于自注意力机制(Self-Attention),彻底革新了序列建模。强大的并行计算能力使其能够处理长距离依赖。

      • BERT (Bidirectional Encoder Representations from Transformers, Devlin et al., 2018) 及后续大模型 (GPT, T5, XLNet等): 基于Transformer Encoder/Decoder,在大规模语料上进行掩码语言模型(Masked Language Model)或自回归语言模型(Autoregressive Language Model)预训练,学习深度的上下文相关表示。这些模型生成的词表示(通常取某个层的输出)强烈依赖于其所在的整个句子(甚至段落)的上下文信息,彻底解决了传统词嵌入和词袋模型无法处理上下文和一词多义的核心痛点。它们已成为现代NLP几乎所有任务的新基础。

八、词袋模型在现代NLP中的意义与定位

尽管风头被深度神经网络和Transformer架构所盖过,词袋模型并未消亡,其价值和影响深远:

  1. 历史基石与教学价值: 它是理解文本向量化、特征工程、信息检索基础(TF-IDF、VSM)的必经之路。学习词袋模型有助于深入理解NLP的底层挑战和解决方案的演进逻辑。

  2. 实用性与快速原型: 对于计算资源有限、数据量不大、任务相对简单(如基于关键词的分类/检索)或需要极高可解释性的场景,TF-IDF + 简单模型(如Naive Bayes, SVM)依然是快速构建有效解决方案的实用选择。启动成本低,易于部署。

  3. 特征融合: 词袋/TF-IDF特征可以与词嵌入、句子嵌入等深度特征拼接(Concatenate) 或通过其他方式融合(Fusion),为下游模型提供互补信息(如显式的关键词信息)。有时能带来性能提升。

  4. 可解释性的标杆: 当深度模型像一个黑箱时,基于词袋的模型(如TF-IDF + Logistic Regression)的特征权重提供了清晰的解释:哪些词对预测某个类别贡献最大?这对于需要模型透明度的应用(如金融风控、医疗诊断辅助)至关重要。

  5. 特定任务的基石: 在某些任务中(如基于布尔逻辑的精确关键词过滤、一些特定领域的主题模型),词袋或其变体仍是核心组件。

九、总结

词袋模型,这一诞生于NLP早期的朴素思想,以其“无视顺序,只计词频”的核心策略,成功地撬开了让计算机处理自然语言文本的大门。它通过构建词频向量或TF-IDF向量,将非结构化的文本转化为结构化的数值表示,为文本分类、情感分析、信息检索、聚类等众多任务提供了可行的解决方案。其概念简单、实现高效、可解释性强的优点使其成为NLP历史上不可或缺的里程碑。


http://www.hkcw.cn/article/QwCbfbJIOn.shtml

相关文章

Windows系统时间怎么设置

打开设置窗口:右键单击任务栏上的时间和日期显示区域,选择 “调整日期 / 时间”。 调整时区:在 “日期和时间” 设置窗口中,单击 “更改时区”,从下拉列表中选择正确的时区,若希望计算机自动调整为夏令时&a…

ssm 学习笔记day03

环境搭建 spring配置数据库 1.在pom.xml安装相应的依赖 2.在properties里面配置数据库的相关信息,需要强调的一点是,一定不要在properties里面添加任何空格,否则就会像我一样搞了两小时,数据一直报错,然后发现是空格的…

Python6.1打卡(day33)

DAY 33 MLP神经网络的训练 知识点回顾: 1.PyTorch和cuda的安装 2.查看显卡信息的命令行命令(cmd中使用) 3.cuda的检查 4.简单神经网络的流程 1.数据预处理(归一化、转换成张量) 2.模型的定义 …

python打卡day42

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 在深度学习中,我们经常需要查看或修改模型中间层的输出或梯度,但标准的前向传播和反向传播过程通常是一个黑盒,很难直接访问中间层的信息。PyT…

[总结]前端性能指标分析、性能监控与分析、Lighthouse性能评分分析

前端性能分析大全 前端性能优化 LightHouse性能评分 性能指标监控分析 浏览器加载资源的全过程性能指标分析 性能指标 在实现性能监控前,先了解Web Vitals涉及的常见的性能指标 Web Vitals 是由 Google 推出的网页用户体验衡量指标体系,旨在帮助开发者量…

Linux 驱动之设备树

Linux 驱动之设备树 参考视频地址 【北京迅为】嵌入式学习之Linux驱动(第七期_设备树_全新升级)_基于RK3568_哔哩哔哩_bilibili 本章总领 1.设备树基本知识 什么是设备树? ​ Linux之父Linus Torvalds在2011年3月17日的ARM Linux邮件列表…

Unity Mono与IL2CPP比较

Unity提供了两种主要的脚本后端(Scripting Backend)选项:Mono和IL2CPP。它们在性能、平台支持和功能特性上有显著差异。 Edit>Project Settings>Player>Other Settings Mono后端 特点: 基于开源的Mono项目(.NET运行时实现) 使用即时编译(JIT…

配置Ollama环境变量,实现远程访问

在安装 Ollama 时配置环境变量 OLLAMA_HOST0.0.0.0:11434的主要目的是允许 Ollama 服务被局域网或远程设备访问,而不仅仅是本地主机(localhost)。 以下是详细原因: 1. Ollama默认行为的限制 默认情况下,Ollama 的 API…

仓颉鸿蒙开发:制作底部标签栏

今天制作标签栏,标签栏里面的有4个区域:首页、社区、消息、我的,以及对应的图标。点击的区域显示为高亮,未点击的区域显示为灰色 简单的将视图上面区域做一下 一、制作顶部公共视图部分 internal import ohos.base.* internal …

AWS之数据分析

目录 数据分析产品对比 1. Amazon Athena 3. AWS Lake Formation 4. AWS Glue 5. Amazon OpenSearch Service 6. Amazon Kinesis Data Analytics 7. Amazon Redshift 8.Amazon Redshift Spectrum 搜索服务对比 核心功能与定位对比 适用场景 关键差异总结 注意事项 …

Linux进程间通信----简易进程池实现

进程池的模拟实现 1.进程池的原理: 是什么 进程池是一种多进程编程模式,核心思想是先创建好一定数量的子进程用作当作资源,这些进程可以帮助完成任务并且重复利用,避免频繁的进程的创建和销毁的开销。 下面我们举例子来帮助理…

【Oracle】安装单实例

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 安装前的准备工作1.1 硬件和系统要求1.2 检查系统环境1.3 下载Oracle软件 2. 系统配置2.1 创建Oracle用户和组2.2 配置内核参数2.3 配置用户资源限制2.4 安装必要的软件包 3. 目录结构和环境变量3.1 创建Ora…

Pyecharts 库的概念与函数

基本概念 Pyecharts 是一个基于 ECharts 的 Python 数据可视化库,具有以下特点: 基于 ECharts:底层使用百度开源的 ECharts 图表库 多种图表类型:支持折线图、柱状图、饼图、散点图、地图等多种图表 交互式:生成的图…

【深入详解】C语言内存函数:memcpy、memmove的使用和模拟实现,memset、memcmp函数的使用

目录 一、memcpy、memmove使用和模拟实现 (一)memcpy的使用和模拟实现 1、代码演示: (1)memcpy拷贝整型 (2)memcpy拷贝浮点型 2、模拟实现 (二)memmove的使用和模…

设计模式——责任链设计模式(行为型)

摘要 责任链设计模式是一种行为型设计模式,旨在将请求的发送者与接收者解耦,通过多个处理器对象按链式结构依次处理请求,直到某个处理器处理为止。它包含抽象处理者、具体处理者和客户端等核心角色。该模式适用于多个对象可能处理请求的场景…

软件的兼容性如何思考与分析?

软件功能的兼容性是指软件在实现功能的时候,能够与其他软件、硬件、系统环境以及数据格式等相互协作、互不冲突,并且能够正确处理不同来源或不同版本的数据、接口和功能模块的能力。它确保软件在多种环境下能够正常运行,同时与其他系统和用户…

C++ —— STL容器——string类

1. 前言 本篇博客将会介绍 string 中的一些常用的函数,在使用 string 中的函数时,需要加上头文件 string。 2. string 中的常见成员函数 2.1 初始化函数 string 类中的常用的初始化函数有以下几种: 1. string() …

DFS每日刷题

目录 P1605 迷宫 P1451 求细胞数量 P1219 [USACO1.5] 八皇后 Checker Challenge P1605 迷宫 #include <iostream> using namespace std; int n, m, t; int a[20][20]; int startx, starty, endx, endy; bool vis[20][20]; int res; int dx[] {0, 1, 0, -1}; int dy[]…

USART 串口通信全解析:原理、结构与代码实战

文章目录 USARTUSART简介USART框图USART基本结构数据帧起始位侦测数据采样波特率发生器串口发送数据 主要代码串口接收数据与发送数据主要代码 USART USART简介 一、USART 的全称与基本定义 英文全称 USART&#xff1a;Universal Synchronous Asynchronous Receiver Transmi…

C# winform 教程(一)

一、安装方法 官网下载社区免费版&#xff0c;在线下载安装 VS2022官网下载地址 下载后双击启动&#xff0c;选择需要模块&#xff08;net桌面开发&#xff0c;通用window平台开发&#xff0c;或者其他自己想使用的模块&#xff0c;后期可以修改&#xff09;&#xff0c;选择…