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

金融数据分析(Python)个人学习笔记(13):自然语言处理

一、导入库和函数

pip install wordcloud
pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
pip install gensim
import pandas as pd
import numpy as np
import jieba

二、载入新闻数据

sinanews = pd.read_csv('my_sinanews2.csv',encoding='gbk')
sinanews

结果:
在这里插入图片描述
新闻标题

myTitle = sinanews.Title[16]
myTitle

结果:

'分析人士:我国宏观政策有空间和余力 各项货币政策会继续落地'

新闻正文

myArticle = sinanews.Article[6]
myArticle

结果:
在这里插入图片描述

三、利用jieba库 分词

分词:把文本切分为词
英文文本:NLTK库
中文文本:Jieba、Ansj、HanLP、盘古分词
jieba库分词函数:cut、 cut_for_search
中文分词技术:
基于规则或字典、n-gram模型、隐马尔可夫模型(HMM)、条件随机场等

(二)三种模式

data = jieba.cut(myTitle, cut_all = True) # 寻找所有可能的词
print("全模式:", '/' .join(data)) # 将分词结果用斜杠 / 连接成一个字符串
data = jieba.cut(myTitle, cut_all = False) # 默认,将句子拆分,不包含重复内容
print("\n精准模式:", '/' .join(data))
data = jieba.cut_for_search(myTitle) # 在精准模式的基础上,再对长词进行切分
print("\n搜索模式:", '/' .join(data))

结果:

全模式: 分析/人士//我国/宏观/宏观政策/观政/政策/有空/空间//余力// //各项/货币/货币政策/政策//继续/落地精准模式: 分析/人士//我国/宏观政策//空间//余力/ /各项/货币政策//继续/落地搜索模式: 分析/人士//我国/宏观/观政/政策/宏观政策//空间//余力/ /各项/货币/政策/货币政策//继续/落地

(二)输出为 list

data = jieba.cut(myTitle)
print(data) # 输出生成器对象的信息
data = jieba.lcut(myTitle) # 返回一个包含分词结果的列表
print('\n','/' .join(data))

结果:

<generator object Tokenizer.cut at 0x00000231AD5A3E20>分析/人士//我国/宏观政策//空间//余力/ /各项/货币政策//继续/落地

(三)并行分词

不支持 Windows 系统,适用于linux系统
并行分词可以利用多核 CPU 的优势,加快大规模文本的分词速度。

# 开启并行分词模式,参数为并发执行的进程数
jieba.enable_parallel(5)# 关闭并行分词模式
jieba.disable_parallel()

(四)词典操作

进行分词时,建立词典,保证关注的词包含在词典中

1. 添加词典

仅对本次运行有效,不会改变jieba库中的词典

jieba.add_word('分析人士') 
'''
或 jieba.suggest_freq('房地产市场', tune = True)
suggest_freq函数可用于调整某个词汇的词频
tune = True:调整该词汇的词频,从而将对象作为一个整体进行切分
'''
data = jieba.lcut(myTitle)
print('/' .join(data))

添加’分析人士’之后,当使用 jieba 进行分词时,如果遇到这个词汇,就会将其作为一个整体进行切分,而不会拆分成其他词语。
结果:

分析人士//我国/宏观政策//空间//余力/ /各项/货币政策//继续/落地

2. 删除词典

jieba.del_word('分析人士')
data = jieba.lcut(myTitle)
print('/' .join(data))

结果:

分析/人士//我国/宏观政策//空间//余力/ /各项/货币政策//继续/落地

3. 加载自定义字典

jieba.load_userdict('user_dict.txt')

自定义词典文件是一个纯文本文件,每行为一个词汇以及相应的词频和词性(词频和词性为可选项)

4. 词性标注

import jieba.posseg as psg
for w,t in psg.lcut(myTitle):print(w,'/',t)

jieba.posseg模块对myTitle进行分词并标注词性,然后逐词打印出词语及其词性
结果:

分析 / vn
人士 / n
: / x
我国 / r
宏观政策 / n
有 / v
空间 / n
和 / c
余力 / n/ x
各项 / r
货币政策 / n
会 / v
继续 / v
落地 / n

5. 词频统计

import jieba 
from collections import Counter
# Counter:对可哈希对象(如字符串、列表、元组等)进行计数统计def get_words(txt):seg_list=jieba.cut(txt) #对文本进行分词,返回生成器c=Counter() # 创建一个counter对象
# 进行词频统计for x in seg_list: # 遍历每个词if len(x)>1 and x != '\r\n':
# 去除长度为1的词(如标点、语气词等)以及换行符c[x] += 1
'''
将词语x的出现次数加 1。
如果词语x是第一次出现,Counter对象会自动将其初始计数设为1;
若已经出现过,则在原有计数基础上加 1。
'''print('常用词频度统计结果')for (k,v) in c.most_common(20): 
'''
返回Counter对象中出现频率最高的前20个词语及其对应的词频
返回的是一个包含元组的列表,每个元组的第一个元素是词语,第二个元素是该词语的出现次数
'''print('%s%s %s %d' % (' '*(5-len(k)), k, '*'*int(v/2), v))
'''
' '*(5-len(k)):在词语前面添加一定数量的空格
'*' * int(v / 2):根据词频生成相应数量的星号
'''get_words(myArticle)

结果:

常用词频度统计结果货币政策 *********** 22
中国人民银行 ********* 19中国 ********* 19经济 ****** 12可以 ***** 11市场 ***** 11余永定 ***** 10增长 ***** 10影响 ***** 10人民币 ***** 10利率 ***** 10目标 ***** 10理解 **** 9政策 **** 9增速 **** 9财政政策 **** 8如何 **** 8变化 **** 8可能 **** 8压力 *** 7

6. 关键词提取

jieba.analyse 模块提供了关键词提取的功能
TF-IDF(词频 - 逆文档频率)算法,其他文本中出现越少、该本文中出现越多,权值越大

import jieba.analyse as analyseprint(" ".join(analyse.extract_tags(myArticle,topK = 20, withWeight = False, allowPOS = ())))
'''
topK = 20:该参数指定了要提取的关键词的数量
withWeight = False:是否返回关键词的权重。当设置为 False 时,函数只返回关键词本身;若设置为 True,则会返回一个包含关键词及其对应权重的元组列表。
allowPOS = ():筛选指定词性的关键词。这里传入一个空元组,表示不进行词性筛选
" ".join(...):把一个可迭代对象中的元素用空格" "连接起来,形成一个新的字符串。
'''

结果:

中国人民银行 货币政策 余永定 最终目标 择机 2025 利率 中国 财政政策 降息 人民币 增速 理解 关税 目标 降准 扩张性 顺差 经济 增长

7. 停用词

可在分词之后,训练模型之前去掉停用词
停用词展示

Stop_words = []
for line in open('stopword.txt',encoding='UTF-8' ):line = line.strip()Stop_words.append(line)Stop_words
'''
for line in ... :逐行读取文件中的内容
strip():去除字符串首尾的空白字符(如空格、制表符、换行符等)
'''

8. 关键词提取:TextRank

基于 TextRank 算法提取文本中的关键词

print(" ".join(analyse.textrank(myArticle,topK = 20, withWeight = False, allowPOS = ('n','nt','v','vn'))))
# 只提取词性为名词(n)、机构团体名(nt)、动词(v)、动名词(vn)的关键词

结果:

中国人民银行 货币政策 经济 可能 影响 利率 市场 增长 政策 资本 人民币 关税 受到 财政政策 增速 变化 投资 目标 理解 调整中国人民银行 货币政策 经济 可能 影响 利率 市场 增长 政策 资本 人民币 关税 受到 财政政策 增速 变化 投资 目标 理解 调整

9. 画词云图

import wordcloud#ls=jieba.lcut(myArticle) #对文本分词
ls = analyse.extract_tags(myArticle,topK = 20, withWeight = False, allowPOS = ()) # 提取关键词
txt= " ".join(ls) #对文本进行标点空格化
w= wordcloud.WordCloud(font_path = "msyh.ttc",width = 1000,height = 700,background_color = "white") 
'''
font_path = "msyh.ttc":指定字体文件的路径msyh.ttc:微软雅黑字体如果不指定字体路径,中文可能会显示为乱码
background_color = "white":设置词云背景为白色
'''
w.generate(txt) # 生成词云
w.to_file("mywordcloud.png") # 保存词云图print(w)

结果:
在这里插入图片描述
至此,已经可以做一些简单的聚类、分类分析

四、文本向量化

(一)文本离散表达

1. 对正文分词

words  = jieba.lcut(myArticle)
' '.join(words)

结果:
在这里插入图片描述

2. 去掉停词

word = []
stopwords = [line.strip() for line in open('stopword1.txt',encoding='UTF-8').readlines()]
for w in words:if w not in stopwords:word.append(w)
' '.join(word)

结果:
在这里插入图片描述

3. 词袋模型向量化,计数

根据正文建立词典,对标题进行向量化
这里与提取关键词的区别在于,是针对分词后的文本,类似于英文中的空格,进行计数,不限于中、英文

from sklearn.feature_extraction.text import CountVectorizer
'''
CountVectorizer:将文本集合转换为词频矩阵其中每一行代表一个文本,每一列代表一个词汇矩阵中的元素表示该词汇在对应文本中出现的次数。
'''Cvect = CountVectorizer(max_features=10)
# 设置生成器,取出现次数最多的前10个词作为字典
doc = []
doc.append(' '.join(word))
Cvect.fit(doc) # 根据文本建立词典
doc1=[]
doc1.append(' '.join(jieba.lcut(myTitle)))
X = Cvect.transform(doc1)
'''
将doc1中的文本转换为词频向量
X是一个稀疏矩阵其中每一行代表doc1中的一个文本每一列代表词汇表中的一个词汇矩阵中的元素表示该词汇在对应文本中出现的次数
'''print('字典中的词:            ', Cvect.get_feature_names_out())
print('\n标题:                  ', doc1)
print('\n标题中每个词出现的次数:', X.toarray())
'''
Cvect.get_feature_names_out():返回构建的词汇表中的所有词汇
X.toarray():将稀疏矩阵X转换为普通的NumPy数组,方便查看每个词汇在文本中出现的次数
'''

结果:

字典中的词:             ['中国' '中国人民银行' '余永定' '利率' '增长' '市场' '影响' '目标' '经济' '货币政策']标题:                   ['分析 人士 : 我国 宏观政策 有 空间 和 余力   各项 货币政策 会 继续 落地']标题中每个词出现的次数: [[0 0 0 0 0 0 0 0 0 1]]

4. TF-IDF模型向量化,权重

from sklearn.feature_extraction.text import TfidfVectorizer
# TfidfVectorizer:将文本数据转换为TF-IDF(词频 - 逆文档频率)特征矩阵tfidf = TfidfVectorizer(max_features=10)
# 设置生成器,取出现次数最多的前10个词作为字典
tfidf.fit(doc)
# 根据文本建立词典,此处可以多添加几个文本,用于计算IDF
# 所有文本放进一个list中,每个元素是一个经过分词的文本
X = tfidf.transform(doc1)
# 根据词典对文本向量化,字典向量中每个词的权重
print('字典中的词:       ', tfidf.get_feature_names_out())
print('\n标题:             ', doc1)
print('\n标题中每个词权重: ', np.round(X.toarray(),2))

结果:

字典中的词:        ['中国' '中国人民银行' '余永定' '利率' '增长' '市场' '影响' '目标' '经济' '货币政策']标题:              ['分析 人士 : 我国 宏观政策 有 空间 和 余力   各项 货币政策 会 继续 落地']标题中每个词权重:  [[0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]

5. 将23篇新闻保存至txt文件

import osstopwords = [line.strip() for line in open('stopword1.txt',encoding='UTF-8').readlines()]
# readlines:读取所有行
if not os.path.exists('sinanews1'): os.makedirs('sinanews1')
# 如果文件路径不存在,就创建一个路径
for i in range(9):myArticle = sinanews.Article[i]words  = jieba.lcut(myArticle)word = []   for w in words:if w not in stopwords:word.append(w)filename = 'sinanews1/news'+str(i)+'.txt'with open(filename,'w',encoding = 'utf-8') as f:f.write(' '.join(word))#将上一步的分好词的文本保存为一个TXT文档

6. 读取所有文档,放进一个list中

def load_news():data = []for i in range(9):filename = 'sinanews1/news'+str(i)+'.txt'with open(filename,'r',encoding = 'utf-8') as f:data.append(f.read()) # 使用f.read()方法读取文件的全部内容,并将其添加到data列表中。return datadata = load_news()
data
# 调用函数并打印列表

结果:
在这里插入图片描述

7. 保存data为一个文件

f = open('sinanews1/allnews.txt','w',encoding = 'utf-8')
for text in data:f.write(text + '\n') # 将每个新闻文本写入文件,并在末尾添加换行符
f.close()
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(max_features=30)## 设置生成器,取出现次数最多的前30个词作为字典,与CountVectorizer相同
tfidf.fit(data)# 根据文本建立词典
doc1=[]
doc1.append(' '.join(jieba.lcut(myTitle)))
X = tfidf.transform(doc1)# 根据词典对文本向量化,字典向量中每个词的权重
print('字典中的词:       ', tfidf.get_feature_names_out())
print('\n标题:             ', doc1)
print('\n标题中每个词权重: ', np.round(X.toarray(),2))

结果:

字典中的词:        ['12' '2024' '中国' '中国人民银行' '中方' '人民币' '伊朗' '会谈' '关税' '发展' '合作' '品牌' '国家''国际' '增长' '市场' '影响' '政策' '比亚迪' '汇率' '特朗普' '目标' '经济' '美国' '美方' '调整' '谈判''货币政策' '越南' '进一步']标题:              ['分析 人士 : 我国 宏观政策 有 空间 和 余力   各项 货币政策 会 继续 落地']标题中每个词权重:  [[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.0. 0. 0. 1. 0. 0.]]

(二)文本分布式表达

1. 导入gensim库以及Word2Vec模型

import gensim
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
from gensim.models import word2vec
'''
gensim:用于主题建模、文档索引和相似性检索,尤其在自然语言处理领域广泛用于处理文本数据和训练词向量模型
Word2Vec:用于训练词向量模型的核心类通过该类可以创建和训练Word2Vec模型,将文本中的每个词表示为一个固定长度的向量
LineSentence:用于处理文本文件的迭代器它可以逐行读取文本文件,并将每行文本分词后作为一个句子返回,方便用于训练Word2Vec模型
'''

2. 载入数据

Word2Vec函数可识别的格式

sentences = word2vec.Text8Corpus('sinanews/allnews.txt')
sina_news = open('sinanews/allnews.txt','r',encoding = 'utf-8')
sentence = LineSentence(sina_news)
'''
Text8Corpus:期望输入的文本文件是按照text8数据集的格式存储的,即文件内容是一个长字符串,单词之间用空格分隔从sinanews/allnews.txt文件中读取数据,并将其转换为适合Word2Vec模型训练的句子流
sentence:创建的一个可迭代句子对象
'''

3. 模型生成

model = Word2Vec(sentences,vector_size=400, min_count=5, sg=0, window =5)
'''
依据输入的句子数据 sentences 训练一个 Word2Vec 词向量模型vector_size=400:设定每个词向量的维度为 400。维度越高,词向量所包含的信息就可能越丰富但同时也会增加计算量和内存占用min_count=5:指定词频的阈值。只有在训练数据中出现次数不少于 5 次的词才会被纳入模型进行训练这样可以过滤掉一些生僻词,减少噪声的影响sg:选择训练算法1:skip-gramm模型,0:CBOW模型window = 5:确定上下文窗口的大小。在训练过程中,模型会考虑目标词前后各5个词作为上下文信息。窗口大小越大,模型能够捕捉到的词之间的长距离依赖关系就越多,但同时也会增加计算复杂度
'''

4. 保存模型

模型词向量至txt文档,可用于分类、聚类等

model.wv.save_word2vec_format('word2vec.txt',binary=False)
'''
将训练得到的词向量保存到一个文本文件中binary=False:表示以文本格式保存词向量。如果设置为True,则会以二进制格式保存二进制格式的文件通常更小,读写速度更快,但不便于人工查看和编辑。保存的文本文件中,第一行包含两个整数,分别表示词汇表的大小和词向量的维度。接下来的每一行对应一个词及其对应的向量,词和向量之间用空格分隔,向量的每个元素之间也用空格分隔。
'''
model.save('word2vec1.word2vec') 
'''
将整个模型保存到一个文件中。保存的文件包含了模型的所有信息,包括词汇表、词向量、训练参数等。这个文件可以使用Word2Vec.load方法进行加载,方便后续继续训练模型或者进行其他操作。
'''

5. 分析词与词之间的关系

不同词向量的相似性

model.wv.similarity('企业','公司')
'''
计算两个词之间的余弦相似度一种常用的度量方法,用于衡量两个向量在方向上的相似程度取值范围在-1到1之间,值越接近1表明两个词的语义越相似接收要计算的两个词,返回一个浮点数
'''

与某个词最相关的词

model.wv.most_similar('企业')
'''
返回一个列表,列表中每个元素是一个元组元组的第一个元素是相似词,第二个元素是余弦相似度topn:返回词的数量,默认返回10个词
'''

6. 采用173条新闻进行训练

载入新闻

sinanews1 = pd.read_csv("my_sinanews1.csv")

将正文提取、分词、去停用词,并保存至一个txt中

import os
jieba.suggest_freq(("碳中和","房地产市场")) # 添加关键词
stopwords = [line.strip() for line in open('stopword1.txt',encoding='UTF-8').readlines()]
if not os.path.exists('sinanews1'): os.makedirs('sinanews1')
filename = 'sinanews1/allnews1.txt' 
f = open(filename,'w',encoding = 'utf-8')
for article in sinanews1.Article:words  = jieba.lcut(article) # 分词word = []   for w in words: # 去停用词if w not in stopwords:word.append(w) # 此时word为list,每个元素为词字符串f.write(' '.join(word) + '\n')# 将每个word list整合为一个字符串,分段保存至一个txt中
f.close()

利用 Word2Vec 进行向量化训练

sentences = word2vec.Text8Corpus('sinanews1/allnews1.txt')
# txt文件中,每条新闻为一段,均经过分词

训练模型

model1 = Word2Vec(sentences,vector_size=400, min_count=5, sg=0, window =5)

某个词的词向量

model1.wv['经济']

与某个词最相关的词

model1.wv.most_similar('人民银行')

与某词最不相关的词

model1.wv.most_similar(negative=['资金'])

不同词向量的相似性,

model1.wv.similarity('贷款','开户')

加减法:银行 - 贷款 + 存款 = ?

model1.wv.most_similar(positive = ['银行','存款'], negative=['贷款'])

保存模型

model1.save('sinanews_word2vec.model') # 模型
model1.wv.save_word2vec_format('sinanews_word2vec.vector', binary=False) # 词向量
model1.wv.save_word2vec_format('sinanews_word2vec.txt',binary=False) # txt格式的词向量    .bin

加载模型

Word2Vec.load('sinanews_word2vec.model')

有新样本时,可以在原来已经训练好的模型上追加训练,不用从头开始

more_sentence = word2vec.Text8Corpus('新文件')
model1.train(more_sentences)

目录下所有文件均有效,不用把文件整合到一起

sentences = PathLineSentences('文件夹目录')

7. 从Github网站下载训练好的模型,或词向量

Github中文社区
载入一个已经训练好的词向量文件,搜狗新闻语料训练所得,1.2G

from gensim import models
model=models.KeyedVectors.load_word2vec_format('word2vec_779845.bin',binary=True)

人民银行 - 政策 + 贷款

model.most_similar(positive = ['人民银行','贷款'], negative=['政策'])

国王 - 男人 + 女人 = 女王

model.most_similar(positive = ['国王','女人'], negative=['男人'])

计算文本相似度
得到文本中每个词的词向量

testtext = '人民银行 加大 稳健 货币政策 实施 力度 房地产 市场 交易 活跃性 上升'
print(model[testtext.split()])
print(np.shape(model[testtext.split()]))

将每个词的词向量相加,得到文本向量,计算不同文本向量的距离

8. Doc2Vec 向量化

因为Doc2Vec中增加了段落信息,因此需要给文本的每个段落一个标签

filename = 'sinanews1/allnews1.txt' 
docs = []
with open(filename,'r',encoding = 'utf-8') as f:doc = f.readlines()
f.close()     

训练模型

from gensim.models import doc2vec
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
documents = [TaggedDocument(d, [i]) for i, d in enumerate(doc)]
model2 = Doc2Vec(documents, dm = 0,vector_size=100, window=8, min_count=5, workers=6)

训练集中索引段落的向量

d1 = model2.dv[1]
d1

推断文本向量

d2 = model2.infer_vector(doc[1].split())
d2

比较训练向量和推断向量的余弦距离

1 - np.dot(d1,d2)/(np.linalg.norm(d1)*np.linalg.norm(d2))

比较两段文本的相似度,即两向量余弦相似度

model2.similarity_unseen_docs(doc[0].split(),doc[1].split())

载入新闻数据

sinanews = pd.read_csv('my_sinanews2.csv',encoding='gbk')
sinanewswith open('my_sinanews2.csv', 'r', encoding='gbk') as file:content = file.read()content

相关文章:

金融数据分析(Python)个人学习笔记(13):自然语言处理

一、导入库和函数 pip install wordcloud pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba pip install gensimimport pandas as pd import numpy as np import jieba二、载入新闻数据 sinanews pd.read_csv(my_sinanews2.csv,encodinggbk) sinanews结果&a…...

ReACT Agent 实战

1. Agent 概述 关于到底什么是 Agent&#xff0c;目前业界并没有一个统一的定义&#xff0c;比如 OpenAI 倾向于将 Agent 看作是大模型能力的延伸&#xff0c;而 LangChain 则侧重于 Agent 是 workflow 的编排。我们没必要去纠结定义&#xff0c;可以简单理解 Agent 并不是某一…...

【JavaScript】关系运算符--非数值类型、Unicode编码表

1、关系运算符--非数值类型 对于非数值进行比较时&#xff0c;会将其转换为数字然后再比较。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…...

【Pandas】pandas DataFrame rtruediv

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

重构数字信任基石:Java 24 网络安全特性的全维度革新与未来防御体系构建

引言&#xff1a;从技术迭代到安全范式的根本性跃迁 在量子计算威胁渐近、分布式系统架构复杂化、数据资产价值指数级增长的 2025 年&#xff0c;Java 平台迎来了自 Java 1.0 以来最具革命性的安全架构升级 ——Java 24 版本。这不仅仅是一次常规的特性更新&#xff0c;而是通…...

HTML倒数

前言 假设您需要一个网页打开后&#xff0c;自动间隔 N 秒进行一次自动刷新&#xff0c;且不依赖 js &#xff0c;那么本文可以帮助到您&#xff0c;以最简单的方式实现需求。 实现代码 TIPS&#xff1a;借助 <meta http-equiv"refresh" content"X"&g…...

【C++】类和对象(上)

文章目录 上文链接一、类&#xff08;class&#xff09;1. 类的定义2. 类与结构体3. 访问限定符4. 类域 二、对象1. 实例化2. 对象大小 三、this 指针1. 什么是 this 指针2. 小练习 上文链接 【C】入门基础知识&#xff08;下&#xff09; 一、类&#xff08;class&#xff09;…...

Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)

Transformer四模型回归打包&#xff08;内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型&#xff09; 目录 Transformer四模型回归打包&#xff08;内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型&#xff09;预测效果基本介绍程序设计参…...

多级缓存入门:Caffeine、Lua、OpenResty、Canal

之前写过——Google Guava Cache简介 本文系统学习一下多级缓存 目录 0.什么是多级缓存商品查询业务案例导入1.JVM进程缓存初识Caffeine实现JVM进程缓存2.Lua语法入门HelloWorld数据类型、变量和循环函数、条件控制3.Nginx业务编码实现多级缓存安装OpenRestyOpenResty快速入门…...

在AWS Glue中实现缓慢变化维度(SCD)的三种类型

根据缓慢变化维度&#xff08;SCD&#xff09;的三种核心类型&#xff08;类型1、类型2、类型3&#xff09;&#xff0c;以下是基于AWS Glue的实现设计、步骤及测试用例&#xff1a; 一、AWS Glue实现SCD的设计与步骤 1. SCD类型1&#xff08;覆盖旧值&#xff09; 设计目标&…...

业务校验工具包-validate-utils介绍

validate-utils介绍 1. 概述 validate-utils是一个基于Hibernate Validator的轻量级校验框架,旨在简化和增强Java应用程序中的数据校验工作。该工具包提供了一系列常见的校验场景,帮助开发人员快速实现数据验证,提高代码的可维护性和可靠性。 2. 功能特性 2.1 集合数据量…...

参数规模:衡量大语言模型体量的标尺

大语言模型的体量差异通过参数数量呈现。业界标杆如GPT-3拥有1750亿参数&#xff0c;Grok-1更达到3140亿级别&#xff0c;而Llama系列则提供70亿至700亿参数的轻量化选择。这里的"70B"并非指训练数据量&#xff0c;而是模型内部结构的复杂度指标——每个参数如同微型…...

JS 中call、apply 和 bind使用方法和场景

call 方法 核心特性 立即执行函数&#xff0c;并显式指定 this 值和逐个传递参数。语法&#xff1a;func.call(thisArg, arg1, arg2, …) 使用场景 借用其他对象的方法 const person { name: "Alice" }; function greet(greeting) {console.log(${greeting}, ${t…...

ZeroGrasp:零样本形状重建助力机器人抓取

25年4月来自CMU、TRI 和 丰田子公司 Woven 的论文“ZeroGrasp: Zero-Shot Shape Reconstruction Enabled Robotic Grasping”。 机器人抓取是具身系统的核心能力。许多方法直接基于部分信息输出抓取结果&#xff0c;而没有对场景的几何形状进行建模&#xff0c;导致运动效果不…...

第2讲、Tensor高级操作与自动求导详解

1. 前言 在深度学习模型中&#xff0c;Tensor是最基本的运算单元。本文将深入探讨PyTorch中两个核心概念&#xff1a; Tensor的广播机制&#xff08;Broadcasting&#xff09;**自动求导&#xff08;Autograd&#xff09;**机制 这些知识点不仅让你更加灵活地操作数据&#…...

(MySQL)表的操作

目录 表的创建 语法 创建表的案例 查看表的结构 修改表的操作 修改表名 ​编辑 添加一个字段(列) 修改一个字段的类型 修改字段名 删除字段名(删除列) 删除指定的表 表的插入数据 数据库的备份和恢复 我们来学习表的操作 表的创建 语法 CREATE TABLE [if not ex…...

函数的使用

函数绑定 fn.call(obj, param1, param2) fn.apply(obj, [param1, param2]) fn.bind(obj, param1, param2)()相同点&#xff1a; 都是借用别人&#xff08;fn&#xff09;的方法&#xff0c;替换其中的this&#xff08;第一个参数&#xff09;call和apply的不同点&#xff1a;a…...

LLM应用于自动驾驶方向相关论文整理(大模型在自动驾驶方向的相关研究)

1、《HILM-D: Towards High-Resolution Understanding in Multimodal Large Language Models for Autonomous Driving》 2023年9月发表的大模型做自动驾驶的论文&#xff0c;来自香港科技大学和人华为诺亚实验室&#xff08;代码开源&#xff09;。 论文简介&#xff1a; 本文…...

Spring MVC深度解析:从原理到实战

文章目录 一、Spring MVC概述1.1 MVC设计模式1.2 Spring MVC特点 二、Spring MVC核心组件2.1 架构流程图解2.2 核心组件说明 三、环境搭建与配置3.1 Maven依赖3.2 传统XML配置 vs JavaConfig 四、控制器开发实践4.1 基础控制器示例4.2 请求映射注解 五、数据处理与绑定5.1 表单…...

Spark学习全总结

基础概念&#xff1a; Spark 是一个快速、通用的大数据处理引擎&#xff0c;支持多种计算模式&#xff0c;如批处理、流处理、交互式查询和机器学习等。 特点: 速度快&#xff1a;基于内存计算&#xff0c;能将数据缓存在内存中&#xff0c;避免频繁读写磁盘&#xff0c;大幅…...

pytorch写张量pt文件,libtorch读张量pt文件

直接在pytorch中&#xff0c;用torch.save保存的张量&#xff0c;可能因格式差异无法在C中加载。 以下是一个最简单的例子&#xff0c;展示如何在 Pytorch中保存张量到 TorchScript 模块&#xff0c;并在 C 中使用 LibTorch 加载。 Python 代码 (save_tensor.py) import torc…...

关于Android Studio的Gradle各项配置2

好的&#xff01;你提到的这些文件是 Gradle 构建系统 和 Android 项目 中非常重要的一部分&#xff0c;它们各自有不同的作用&#xff0c;涉及项目的构建配置、Gradle 环境、系统配置等方面。接下来我会为你详细解释每个文件的作用&#xff0c;并提供具体的例子和注释。 1. gr…...

Android Studio中创建第一个Flutter项目

一、Flutter环境验证 创建Flutter项目之前需要验证是否有Flutter环境&#xff0c;如没有Flutter 环境&#xff0c;请参考配置Flutter开发环境 1.1、flutter doctor 验证通过会有以下提示 [√] Flutter (Channel stable, 3.29.3, on Microsoft Windows [版本 10.0.19045.573…...

Linux的例行性工作(crontab)

crontab服务 at 命令是在指定的时间只能执行一次任务, crontab 命令可以循环重复的执行定时任务,与 Windows 中的计划任务有些类似 crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程&#xff0c;在安装完成操 作系统后&#xff0c;默认会安装 crond …...

03 基于 STM32 的温度控制系统

前言 Protues、KeilC 设计内容&#xff1a;使用STM32设计一个空调温度的显示控制系统 设计要求&#xff1a; 1.温度显示范围为16-30摄氏度 2.按键K1实现显示温度加1&#xff0c;按键K2实现显示温度减1&#xff0c;低于16或高于30&#xff0c;显示数值不变 3.正常按键蜂鸣器响一…...

23种设计模式-行为型模式之备忘录模式(Java版本)

Java 备忘录模式&#xff08;Memento Pattern&#xff09;详解 &#x1f9e0; 什么是备忘录模式&#xff1f; 备忘录模式是一种行为型设计模式&#xff0c;它允许在不暴露对象实现细节的情况下&#xff0c;保存和恢复对象的状态。备忘录模式常常用于需要记录对象状态以便随时…...

[三分钟]web自动化测试(二):selenium自动化测试常用函数(上)

文章目录 1.元素定位1.1 cssSelector(选择器)1.2 xpath1.3小示例 2.操作测试对象2.1点击/提交对象-click()2.2 模拟按键输入-sendKeys("")2.3 清除文本内容-clear()2.4 获取文本信息-getText()2.5 获取当前页面标题-getTitle()2.6获取当前页面URL-getCurrentUrl() 3.…...

基于ruoyi-plus实现AI聊天和绘画

项目介绍 基于ruoyi-plus实现AI聊天和绘画功能&#xff0c;打造自己的AI平台。前后端分离&#xff0c;有管理后台&#xff0c;用户端&#xff0c;小程序端。支持对接openai&#xff0c;讯飞星火&#xff0c;通义灵码&#xff0c;deepseek等大语言模型。项目架构 管理后台-前端&…...

假设检验学习总结

目录 一、假设检验1. 两种错误2. z检验和t检验3. t检验3.1 单样本t检验3.2 配对样本t检验3.3 独立样本t检验4 方差齐性检验备注卡方检验样本容量的计算AB测试主要的两种应用场景绝对量的计算公式率的计算公式说明一、假设检验 1. 两种错误 第一类错误 原假设为真,却拒绝了原假…...

C++ 基于多设计模式下的同步异步⽇志系统-2项目实现

⽇志系统框架设计 1.⽇志等级模块:对输出⽇志的等级进⾏划分&#xff0c;以便于控制⽇志的输出&#xff0c;并提供等级枚举转字符串功能。 ◦ OFF&#xff1a;关闭 ◦ DEBUG&#xff1a;调试&#xff0c;调试时的关键信息输出。 ◦ INFO&#xff1a;提⽰&#xff0c;普通的提⽰…...

Tauri窗口与界面管理:打造专业桌面应用体验 (入门系列五)

窗口管理是桌面应用的核心特性之一&#xff0c;良好的窗口管理可以显著提升用户体验。在Web开发中&#xff0c;我们通常被限制在浏览器窗口内&#xff0c;但Tauri允许前端开发者控制应用窗口的方方面面&#xff0c;从而创造出更加原生的体验。 窗口配置基础 初始窗口配置 在…...

golang goroutine(协程)和 channel(管道) 案例解析

文章目录 goroutine和channel概念开启线程与channel简单通信流程多个工作协程并发执行流程 goroutine和channel概念 goroutine(协程)&#xff0c;一般我们常见的是进程&#xff0c;线程&#xff0c;进程可以理解为一个软件在运行执行的过程&#xff0c;线程跟协程比较类似&…...

底层源码和具体测试解析HotSpot JVM的notify唤醒有序性(5000字详解)

在大家的认知里&#xff0c;或者大家也可能搜过&#xff0c;notify唤醒机制到底是随机的呢&#xff1f;还是顺序的呢&#xff1f;在网上其实也有很多人说notify的唤醒机制就是随机的&#xff0c;但实际上并不是这样的&#xff0c;notify的唤醒机制是先进先出的&#xff01; 目…...

Jenkins(CI/CD工具)

1. 什么是 Jenkins&#xff1f; Jenkins 是一个开源的持续集成&#xff08;CI&#xff09;和持续交付/部署&#xff08;CD&#xff09;工具&#xff0c;用于自动化软件构建、测试和部署过程。 2. Jenkins 优势 &#xff08;1&#xff09;开源免费&#xff1a;社区活跃&#…...

Apache Sqoop数据采集问题

Sqoop数据采集格式问题 一、Sqoop工作原理二、Sqoop命令格式三、Oracle数据采集格式问题四、Sqoop增量采集方案 Apache Sqoop是一款开源的工具&#xff0c;主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递&#xff0c;可以将一个关系型数据库&…...

再学GPIO(二)

GPIO寄存器 每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL&#xff0c;GPIOx_CRH)&#xff0c;两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)&#xff0c;一个32位置位/复位寄存器(GPIOx_BSRR)&#xff0c;一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。 GPIO…...

err: Error: Request failed with status code 400

好的&#xff0c;今天学习ai的时候从前端发送请求&#xff0c;实在是想不通为啥会啥是一个坏请求&#xff0c;后来从前端方法一个一个找参数&#xff0c;传递的值都有&#xff0c;然后想到我这边需要传递的是一个对象&#xff0c;那么后端使用的RequestParam就接收不到json对象…...

解决qnn htp 后端不支持boolean 数据类型的方法。

一、背景 1.1 问题原因 Qnn 模型在使用fp16的模型转换不支持类型是boolean的cast 算子&#xff0c;因为 htp 后端支持量化数据类型或者fp16&#xff0c;不支持boolean 类型。 ${QNN_SDK_ROOT_27}/bin/x86_64-linux-clang/qnn-model-lib-generator -c ./bge_small_fp16.cpp -b …...

k8s学习记录(五):Pod亲和性详解

一、前言 上一篇文章初步探讨了 Kubernetes 的节点亲和性&#xff0c;了解到它在 Pod 调度上比传统方式更灵活高效。今天我们继续讨论亲和性同时Kubernetes 的调度机制。 二、Pod亲和性 上一篇文章中我们介绍了节点亲和性&#xff0c;今天我们讲解一下Pod亲和性。首先我们先看…...

MongoDB与PHP7的集成与优化

MongoDB与PHP7的集成与优化 引言 随着互联网技术的飞速发展,数据库技术在现代软件开发中扮演着越来越重要的角色。MongoDB作为一种流行的NoSQL数据库,以其灵活的数据模型和强大的扩展性受到众多开发者的青睐。PHP7作为当前最流行的服务器端脚本语言之一,其性能和稳定性也得…...

maven相关概念深入介绍

1. pom.xml文件 就像Make的MakeFile、Ant的build.xml一样&#xff0c;Maven项目的核心是pom.xml。POM&#xff08;Project Object Model&#xff0c;项目对象模型&#xff09;定义了项目的基本信息&#xff0c;用于描述项目如何构建&#xff0c;声明项目依赖&#xff0c;等等。…...

以科技之力,启智慧出行 —— 阅读《NVIDIA 自动驾驶安全报告》及观看实验室视频有感

作为中南民族大学通信工程专业的学生&#xff0c;近期研读《NVIDIA 自动驾驶安全报告》并观看其实验室系列视频后&#xff0c;我深刻感受到自动驾驶技术不仅是一场交通革命&#xff0c;更是一次社会生产力的解放与民族精神的升华。这场变革的浪潮中&#xff0c;我看到了科技如何…...

2P4M-ASEMI机器人功率器件专用2P4M

编辑&#xff1a;LL 2P4M-ASEMI机器人功率器件专用2P4M 型号&#xff1a;2P4M 品牌&#xff1a;ASEMI 封装&#xff1a;TO-126 批号&#xff1a;最新 引脚数量&#xff1a;3 封装尺寸&#xff1a;如图 特性&#xff1a;双向可控硅 工作结温&#xff1a;-40℃~150℃ 在…...

基础的贝叶斯神经网络(BNN)回归

下面是一个最基础的贝叶斯神经网络&#xff08;BNN&#xff09;回归示例&#xff0c;采用PyTorch实现&#xff0c;适合入门理解。 这个例子用BNN拟合 y x 噪声 的一维回归问题&#xff0c;输出均值和不确定性&#xff08;方差&#xff09;。 import torch import torch.nn a…...

小黑享受思考心流: 73. 矩阵置零

小黑代码 class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""items []m len(matrix)n len(matrix[0])for i in range(m):for j in range(n):if not m…...

整合 | 大模型时代:微调技术在医疗智能问答矩阵的实战应用20250427

&#x1f50e; 整合 | 大模型时代&#xff1a;微调技术在医疗智能问答矩阵的实战应用 一、引言 在大模型技术高速变革的背景下&#xff0c;数据与微调技术不再是附属品&#xff0c;而是成为了AI能力深度重构的核心资产。 尤其在医疗行业中&#xff0c;微调技术改写了智能分诊和…...

Web安全:威胁解析与综合防护体系构建

Web安全&#xff1a;威胁解析与综合防护体系构建 Web安全是保护网站、应用程序及用户数据免受恶意攻击的核心领域。随着数字化转型加速&#xff0c;攻击手段日益复杂&#xff0c;防护需兼顾技术深度与系统性。以下从威胁分类、防护技术、最佳实践及未来趋势四个维度&#xff0…...

spring项目rabbitmq es项目启动命令

应该很多开发者遇到过需要启动中间件的情况&#xff0c;什么测试服务器挂了&#xff0c;服务连不上nacos了巴拉巴拉的&#xff0c;虽然是测试环境&#xff0c;但也会手忙脚乱&#xff0c;疯狂百度。 这里介绍一些实用方法 有各种不同的场景&#xff0c;一是重启&#xff0c;服…...

人工智能期末复习1

该笔记为2024.7出版的人工智能技术应用导论&#xff08;第二版&#xff09;课本部分的理论总结。 一、人工智能的产生与发展 概念&#xff1a;人工智能是通过计算机系统和模型模拟、延申和拓展人类智能的理论、方法、技术及应用系统的一门新的技术科学。 发展&#xff1a;19…...

深入理解指针(5)

字符指针变量 对下述代码进行调试 继续go,并且观察p2 弹出错误&#xff1a; 为什么报错呢&#xff1f; 因为常量字符串是不能被修改的&#xff0c;否则&#xff0c;编译器报错。 最后&#xff0c;打印一下&#xff1a; 《剑指offer》中收录了⼀道和字符串相关的笔试题&#…...