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

自然语言处理:词频-逆文档频率

介绍

大家好,博主又来给大家分享知识了。本来博主计划完成稠密向量表示的内容分享后,就开启自然语言处理中文本表示的讲解。可在整理分享资料的时候,博主发现还有个知识点,必须得单独拎出来好好说道说道。

这就是TF-IDF,也就是词频-逆文档频率。它在自然语言处理里堪称“幕后功臣”,在文本表示、文本分类、信息检索等诸多关键任务中,发挥着超乎想象的作用。那么,我们直接进入正题。

TF-IDF

自然语言处理(NLP)领域,理解文本数据的含义并从中提取有价值的信息是核心任务。TF-IDF(Term Frequency-Inverse Document Frequency)作为一种重要的统计方法,在文本表示、文本分类、信息检索、关键词提取等众多任务中发挥着关键作用。

基础概念

词频

Term Frequency, TF。词频衡量的是一个词在一篇文档中出现的频率。直观地说,一个词在文档中出现的次数越多,它对该文档的重要性可能越高。例如,在文档“我喜欢苹果,苹果很美味”中,“苹果”这个词出现了两次,相对其他词出现的频率较高,可能在该文档中具有一定重要性。

其计算公式为:TF_{t,d} = \frac{n_{t,d}}{\sum_{k} n_{k,d}}

其中,TF_{t,d}表示词t在文档d中的词频,n_{t,d}是词t在文档d中出现的次数,\sum_{k} n_{k,d}是文档d中所有词的出现次数总和。

逆文档频率

Inverse Document Frequency, IDF。逆文档频率反映了一个词在整个文档集合中的普遍重要性。如果一个词在大量文档中都出现,那么它对于区分不同文档的作用就较小。相反,一个只在少数文档中出现的词,对于识别这些特定文档更为关键。

例如,“的”,“是”等常用词在几乎所有文档中都会频繁出现,它们的区分能力较弱。而专业术语如“量子纠缠”,只在特定领域的文档中出现,其区分能力较强。

其计算公式为:IDF_{t} = \log \frac{N}{n_{t}}

其中,IDF_{t}表示词t的逆文档频率,N是文档集合中的文档总数,n_{t}是包含词t的文档数量。

TF-IDF加权

TF-IDF加权综合了词频和逆文档频率,通过将两者相乘得到每个词在文档中的TF-IDF值。

公式为:TF-IDF_{t,d} = TF_{t,d} \times IDF_{t}

TF-IDF值越高,说明该词对当前文档越重要,同时在整个文档集中相对不常见,具有较强的区分性。

代码实现

计算词频(TF)

完整代码
# 从collections模块导入Counter类,用于统计元素出现的次数
from collections import Counter# 定义一个名为NLPTextRepresentation的类,用于处理文本表示相关任务
class NLPTextRepresentation:# 类的初始化方法,此处不做任何初始化操作def __init__(self):# pass 语句占位,不进行实际操作pass# 定义一个方法,用于计算文档中每个单词的词频(TF)def compute_tf(self, document):# 将输入的文档按空格分割成单词列表words = document.split()# 使用Counter统计每个单词在文档中出现的次数word_count = Counter(words)# 计算文档中单词的总数total_words = len(words)# 初始化一个空字典,用于存储每个单词的词频tf_dict = {}# 遍历统计结果中的每个单词及其出现次数for word, count in word_count.items():# 计算该单词的词频并存储到字典中tf_dict[word] = count / total_words# 返回存储词频的字典return tf_dict# 当脚本作为主程序运行时执行以下代码
if __name__ == "__main__":# 创建NLPTextRepresentation类的一个实例nlp_text_representation = NLPTextRepresentation()# 定义一个示例文档document = "我喜欢苹果 苹果很美味"# 调用compute_tf方法计算文档中单词的词频tf_result = nlp_text_representation.compute_tf(document)# 打印计算得到的词频结果print(tf_result)
运行结果
{'我喜欢苹果': 0.5, '苹果很美味': 0.5}进程已结束,退出代码为 0

在这段代码中,首先使用split()方法将输入的文档字符串分割成单词列表。然后,利用Counter类统计每个单词在文档中出现的次数。

接着,计算文档的总词数,通过遍历每个单词及其出现次数,将每个单词的出现次数除以总词数,得到该单词在文档中的词频,并存储在字典tf_dict中。

最后返回这个字典,其中键为单词,值为对应的词频。

计算逆文档频率(IDF)

完整代码
# 导入math模块,用于使用数学函数,这里主要是为了计算对数
import math# 定义一个名为NLPTextRepresentation的类,用于处理自然语言处理中的文本表示相关任务
class NLPTextRepresentation:# 类的初始化方法,目前不做任何初始化操作def __init__(self):# 占位语句,不执行任何实际逻辑pass# 定义一个方法,用于计算语料库中每个单词的逆文档频率(IDF)def compute_idf(self, corpus):# 计算语料库中文档的总数total_docs = len(corpus)# 初始化一个空字典,用于存储每个单词在多少个文档中出现过word_in_doc_count = {}# 遍历语料库中的每一个文档for doc in corpus:# 将当前文档按空格分割成单词,并使用 set 去重words = set(doc.split())# 遍历当前文档中出现的每个唯一单词for word in words:# 如果该单词还未在word_in_doc_count字典中if word not in word_in_doc_count:# 则将该单词添加到字典中,并将其出现文档数初始化为 1word_in_doc_count[word] = 1else:# 否则,将该单词出现的文档数加 1word_in_doc_count[word] += 1# 初始化一个空字典,用于存储每个单词的逆文档频率idf_dict = {}# 遍历word_in_doc_count字典中的每个单词及其出现文档数for word, count in word_in_doc_count.items():# 计算该单词的逆文档频率(使用自然对数),并存储到idf_dict中idf_dict[word] = math.log(total_docs / count)# 返回存储逆文档频率的字典return idf_dict# 当脚本作为主程序运行时执行以下代码
if __name__ == "__main__":# 创建NLPTextRepresentation类的一个实例nlp_text_representation = NLPTextRepresentation()# 定义一个语料库,包含多个文档corpus = ["我喜欢苹果 苹果很美味", "我喜欢香蕉 香蕉很甜", "苹果和香蕉都是水果"]# 调用compute_idf方法计算语料库中每个单词的逆文档频率idf_result = nlp_text_representation.compute_idf(corpus)# 打印计算得到的逆文档频率结果print(idf_result)
运行结果
{'我喜欢苹果': 1.0986122886681098, '苹果很美味': 1.0986122886681098, '我喜欢香蕉': 1.0986122886681098, '香蕉很甜': 1.0986122886681098, '苹果和香蕉都是水果': 1.0986122886681098}进程已结束,退出代码为 0

在这段代码中,首先计算语料库中总的文档数量。然后,遍历语料库中的每一篇文档,将文档中的单词通过set()方法去重,以确保每个单词只被统计一次。

对于每个单词,如果它不在word_in_doc_count字典中,则将其初始值设为 1;如果已经存在,则将其对应的值加 1,这样word_in_doc_count字典记录了每个单词在多少篇文档中出现过。

接下来,通过遍历word_in_doc_count字典,根据逆文档频率的计算公式,计算每个单词的逆文档频率,并存储在idf_dict字典中返回。

计算词频-逆文档频率(TF-IDF)

完整代码
# 从collections模块导入Counter类,用于统计元素出现的次数
from collections import Counter
# 导入math模块,用于使用数学函数,这里主要是为了计算对数
import math# 定义一个名为NLPTextRepresentation的类,用于处理自然语言处理中的文本表示相关任务
class NLPTextRepresentation:# 类的初始化方法,目前不做任何初始化操作def __init__(self):# 占位语句,不执行任何实际逻辑pass# 定义一个方法,用于计算文档中每个单词的词频(TF)def compute_tf(self, document):# 将输入的文档按空格分割成单词列表words = document.split()# 使用Counter统计每个单词在文档中出现的次数word_count = Counter(words)# 计算文档中单词的总数total_words = len(words)# 初始化一个空字典,用于存储每个单词的词频tf_dict = {}# 遍历统计结果中的每个单词及其出现次数for word, count in word_count.items():# 计算该单词的词频并存储到字典中tf_dict[word] = count / total_words# 返回存储词频的字典return tf_dict# 定义一个方法,用于计算语料库中每个单词的逆文档频率(IDF)def compute_idf(self, corpus):# 计算语料库中文档的总数total_docs = len(corpus)# 初始化一个空字典,用于存储每个单词在多少个文档中出现过word_in_doc_count = {}# 遍历语料库中的每一个文档for doc in corpus:# 将当前文档按空格分割成单词,并使用set去重words = set(doc.split())# 遍历当前文档中出现的每个唯一单词for word in words:# 如果该单词还未在word_in_doc_count字典中if word not in word_in_doc_count:# 则将该单词添加到字典中,并将其出现文档数初始化为1word_in_doc_count[word] = 1else:# 否则,将该单词出现的文档数加1word_in_doc_count[word] += 1# 初始化一个空字典,用于存储每个单词的逆文档频率idf_dict = {}# 遍历word_in_doc_count字典中的每个单词及其出现文档数for word, count in word_in_doc_count.items():# 计算该单词的逆文档频率(使用自然对数),并存储到idf_dict中idf_dict[word] = math.log(total_docs / count)# 返回存储逆文档频率的字典return idf_dict# 定义一个方法,用于计算语料库中每个文档里单词的TF-IDF值def compute_tfidf(self, corpus):# 初始化一个空列表,用于存储每个文档的TF-IDF结果tfidf_corpus = []# 调用compute_idf方法计算语料库中所有单词的逆文档频率idf = self.compute_idf(corpus)# 遍历语料库中的每一个文档for doc in corpus:# 调用compute_tf方法计算当前文档中每个单词的词频tf = self.compute_tf(doc)# 初始化一个空字典,用于存储当前文档中每个单词的TF-IDF值tfidf_doc = {}# 遍历当前文档词频字典中的每个单词for word in tf:# 计算该单词的TF-IDF值并存储到字典中tfidf_doc[word] = tf[word] * idf[word]# 将当前文档的TF-IDF结果添加到tfidf_corpus列表中tfidf_corpus.append(tfidf_doc)# 返回存储所有文档TF-IDF结果的列表return tfidf_corpus# 当脚本作为主程序运行时执行以下代码
if __name__ == "__main__":# 创建NLPTextRepresentation类的一个实例nlp_text_representation = NLPTextRepresentation()# 定义一个包含多个文档的语料库corpus = ["我喜欢苹果 苹果很美味", "我喜欢香蕉 香蕉很甜", "苹果和香蕉都是水果"]# 调用compute_tfidf方法计算语料库中每个文档里单词的TF-IDF值tfidf_result = nlp_text_representation.compute_tfidf(corpus)# 遍历计算得到的TF-IDF结果列表for i, doc in enumerate(tfidf_result):# 打印每个文档的TF-IDF计算结果print(f"文档{i + 1}的TF-IDF结果: {doc}")
运行结果
文档1的TF-IDF结果: {'我喜欢苹果': 0.5493061443340549, '苹果很美味': 0.5493061443340549}
文档2的TF-IDF结果: {'我喜欢香蕉': 0.5493061443340549, '香蕉很甜': 0.5493061443340549}
文档3的TF-IDF结果: {'苹果和香蕉都是水果': 1.0986122886681098}进程已结束,退出代码为 0

这段代码首先调用前面定义的compute_idf函数计算整个语料库的逆文档频率。然后,遍历语料库中的每一篇文档,对每篇文档调用compute_tf函数计算词频。

接着,对于每个词,将其在当前文档中的词频乘以其在整个语料库中的逆文档频率,得到该词在当前文档中的TF-IDF值,并存储在tfidf_doc字典中。

最后,将每篇文档的TF-IDF字典结果添加到tfidf_corpus列表中并返回。这段代码的目的是将前面计算得到的词频和逆文档频率进行综合计算,得到每篇文档中每个词的TF-IDF值,从而完成TF-IDF加权的计算过程。 

TF-IDF的优点

  • 简单有效:TF-IDF的计算原理直观易懂,实现相对简单,不需要复杂的模型训练过程,却能在很多实际应用中取得较好的效果,如文本分类、信息检索等。
  • 突出关键信息:通过加权计算,能够突出那些在特定文档中频繁出现且在整个文档集中相对不常见的词,这些词往往与文档的主题紧密相关,有助于快速定位文档的核心内容。
  • 可扩展性好:无论是小规模还是大规模的文档集合,TF-IDF都能适用,并且计算资源消耗相对可控。在处理大规模文本数据时,可以通过分布式计算等方式进一步优化计算效率。

TF-IDF的缺点

  • 忽略语义信息:TF-IDF只考虑了词的出现频率和文档分布,完全没有涉及词与词之间的语义关系。例如,“汽车”“轿车”在语义上相近,但TF-IDF无法体现这种关系,可能会导致在一些需要语义理解的任务中效果不佳。
  • 依赖文档集合:逆文档频率的计算依赖于整个文档集合,当文档集合发生变化时,需要重新计算IDF值,这在实时性要求较高的应用场景中可能会带来不便。
  • 无法处理多义词:对于具有多种含义的词,TF-IDF不能区分其在不同上下文中的语义差异,会将其视为同一个词进行计算,可能影响对文本的准确理解。

结论赋能

TF-IDF作为自然语言处理中的经典方法,在文本分析的众多领域有着广泛应用。通过对词频和逆文档频率的巧妙结合,能够有效地提取文本中的关键信息,为后续的文本处理任务提供有力支持。

然而,其固有的局限性也为研究人员提供了改进和创新的方向。在实际应用中,需要根据具体任务的需求和数据特点,合理选择是否使用TF-IDF,并结合其他技术(如词向量模型等)来弥补其不足,以更好地实现自然语言处理的目标。

结束

好了,以上就是本次分享的全部内容了。不知道大家是否对TF-IDF有了更深入的理解,以及对其在实际应用中的潜力有了新的认识呢?希望本次分享能为大家在自然语言处理的学习和实践中带来启发和帮助。

随着自然语言处理技术的不断发展,我们期待看到更多能够克服TF-IDF局限性的创新方法涌现。无论是在文本分类、信息检索,还是在文本摘要等领域,TF-IDF都已经奠定了坚实的基础,激励着研究者们不断探索更高效、更精准的文本处理策略。

那么本次分享就到这里了。最后,博主还是那句话:请大家多去大胆的尝试和使用,成功总是在不断的失败中试验出来的,敢于尝试就已经成功了一半。如果大家对博主分享的内容感兴趣或有帮助,请点赞和关注。大家的点赞和关注是博主持续分享的动力🤭,博主也希望让更多的人学习到新的知识。

相关文章:

自然语言处理:词频-逆文档频率

介绍 大家好,博主又来给大家分享知识了。本来博主计划完成稠密向量表示的内容分享后,就开启自然语言处理中文本表示的讲解。可在整理分享资料的时候,博主发现还有个知识点,必须得单独拎出来好好说道说道。 这就是TF-IDF&#xf…...

【银河麒麟高级服务器操作系统】服务器测试业务耗时问题分析及处理全流程分享

更多银河麒麟操作系统产品及技术讨论,欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer…...

基于大数据的民宿旅馆消费数据分析系统

【大数据】基于大数据的民宿旅馆消费数据分析系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统可以揭示民宿市场的消费模式和价格分布情况,帮助理解消费者偏好、价格走势及…...

Spring-AI搭建企业专属知识库 一

环境介绍&#xff1a;Spring3.3.2 JDK 21 POM文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…...

极简本地体验deepseek大模型教程

一 题外随感&#xff1a;时代之问 就像狄更斯在双城记中所述&#xff0c;“这是最好的时代&#xff0c;这是最坏的时代”。每一代人都有其所处的时代&#xff0c;每一个时代都有其所谓好的一面和不那么好的一面。很多时候随口的一句大环境不好&#xff0c;就似乎给了自己一个最…...

RabbitMQ系列(五)基本概念之Queue

在 RabbitMQ 中&#xff0c;Queue&#xff08;队列&#xff09; 是存储消息的容器&#xff0c;也是消息传递的核心载体。以下是其核心特性与作用的全方位解析&#xff1a; 一、Queue 的定义与核心作用 消息存储容器 Queue 是 RabbitMQ 中实际存储消息的实体&#xff0c;生产者…...

【记录】成为创作者的第 730 天(两年)

收获 还是总在感叹走到今天收获的一切&#xff0c;都是自己曾经不敢想的。 无论是靠自己努力拿到的 Offer&#xff0c;还是在 CSDN 网站上结交的网友和前辈们&#xff0c;都是我莫大的荣幸和财富&#xff0c;感恩一切、感恩自己。 过去一年的收获真的数不胜数&#xff0c;抛…...

深度剖析数据分析职业成长阶梯

一、数据分析岗位剖析 目前&#xff0c;数据分析领域主要有以下几类岗位&#xff1a;业务数据分析师、商业数据分析师、数据运营、数据产品经理、数据工程师、数据科学家等&#xff0c;按照工作侧重点不同&#xff0c;本文将上述岗位分为偏业务和偏技术两大类&#xff0c;并对…...

【XSS】DVWA靶场XSS攻击

一、XSS攻击 1.1. XSS 攻击简介 XSS&#xff08;Cross-Site Scripting&#xff0c;跨站脚本攻击&#xff09;是一种常见的Web安全漏洞&#xff0c;它允许攻击者在受害者的浏览器中执行恶意脚本。攻击者通常通过在Web应用程序中注入恶意脚本代码&#xff08;如JavaScript&…...

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量&#xff08;可选&#xff09;解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下&#xff0c;Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密&#xff1a; 1…...

04 路由表的IP分组传输过程

目录 1、路由表的核心结构 2、IP分组传输过程和数据包转发过程 2.1、IP分组传输过程 2.2、数据包转发过程 2.3、IP分组传输过程和数据包转发的区别 3、数据包的变化 3.1、拓扑结构 3.2、传输过程详解&#xff08;主机A → 主机B&#xff09; 3.2.1、主机A发送数据 3.2…...

AI Agent 定义与核心要素详解

AI Agent&#xff08;人工智能代理&#xff09;是一种能够感知环境、自主决策并执行任务以达成目标的软件实体。它结合了感知、推理、学习和行动能力&#xff0c;能够在复杂环境中独立或协作工作。以下是其核心要素&#xff1a; 1. 感知 AI Agent 通过传感器或数据输入感知环…...

记忆化搜索与动态规划:原理、实现与比较

记忆化搜索和动态规划是解决优化问题的两种重要方法&#xff0c;尤其在处理具有重叠子问题和最优子结构性质的问题时非常有效。 目录 1. 记忆化搜索&#xff08;Memoization&#xff09; 定义&#xff1a; 实现步骤&#xff1a; 示例代码&#xff08;斐波那契数列&#xff0…...

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…...

计算机网络基础简答题资料(对口高考)

1、什么是计算机网络&#xff1f;计算机网络的功能有哪些&#xff1f; 答案&#xff1a;计算机网络&#xff0c;是指将分布在不同地理位置、具有独立功能的多台计算机及其外围设备&#xff0c;通过通信设备和通信线路连接起来&#xff0c;在网络操作系统、网络管理软件及网络通…...

mysql内置工具导入csv包,简单便捷高效

先创建一个你想要的数据库 create database uba; 分析导入文件的格式内容 提前在数据库里创建你需要的表格 不然就会收到”mysqlimport: Error: 1146“大礼包 (你的csv文件名和表格名字一摸一样&#xff0c;大小写也是&#xff09; use uba; create table userBehavior (us…...

【汽车ECU电控数据管理篇】HEX文件格式解析篇章

一、HEX格式文件是啥 HEX 文件是 Intel 公司提出的一种按地址排列的数据信息格式&#xff0c;通常用于存储嵌入式系统的二进制代码。它以 ASCII 码的形式记录数据&#xff0c;每一行以冒号开头&#xff0c;包含数据长度、地址、记录类型、数据和校验码等信息。HEX 文件常用于程…...

SOLID Principle基础入门

(Robert C. Martin (Uncle Bob)) 什么是SOLID原则&#xff1f; SOLID原则是面向对象编程&#xff08;OOP&#xff09;中编写高质量代码的指导方针。实际上&#xff0c;即使不使用SOLID原则&#xff0c;仅通过类、继承、封装和多态性&#xff0c;也可以让程序正常运行。那么为…...

keil主题(vscode风格)

#修改global.prop文件&#xff0c;重新打开keil即可 # Keil uVision Global Properties File # This file is used to customize the appearance of the editor# Editor Font editor.font.nameConsolas editor.font.size10 editor.font.style0# Editor Colors editor.backgro…...

微信小程序读取写入NFC文本,以及NFC直接启动小程序指定页面

一、微信小程序读取NFC文本(yyy优译小程序实现),网上有很多通过wx.getNFCAdapter方法来监听读取NFC卡信息,但怎么处理读取的message文本比较难找,现用下面方法来实现,同时还解决几个问题,1、在回调方法中this.setData不更新信息,因为this的指向问题,2、在退出页面时,…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...