【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)
【学术小白的学习之路】基于情感词典的情感分析
- 1.基础函数
- 1.1 判断情感词的否定词数量
- 1.2 导入情感词典
- 1.3 切分句子
- 1.3.1为什么划分
- 1.3.2 划分代码
- 1.4 完整代码
- 2.导入词典
- 3.中文情感分析算法思路
- 4.1情感词获取思路
- 4.2 计算情感分值
- 4.3 得分的归一化处理
- 4.实证
- 5.总结
本文的情感分析逻辑大致如下,没有进行专门的分词工作,进行了分句子工作,识别出需要的词,计算出情感倾向。

1.基础函数
1.1 判断情感词的否定词数量
在情感分析代码中,我们需要写一个函数来主要作用是判断情感词前面是否存在奇数个否定词。这对于情感分析的逻辑非常重要,因为否定词的数量会影响最终的情感得分。
def is_odd(self, num):if num % 2 == 0:return 'even'else:return 'odd'
具体用途在判断否定影响:
在分析情感词时,代码会检查该情感词前面出现的否定词数量。如果否定词的数量是奇数,则表示这个情感词的情感倾向应该反转。例如,“不是好” 表示负面情感,因为有一个否定词 “不”。
通过使用 is_odd 函数,代码能够更准确地反映文本中的情感。例如,在处理类似于 “我不喜欢这个产品” 的句子时,函数帮助正确地识别出该句子传达的是负面情感。
1.2 导入情感词典
我们需要写一个函数从指定的文件中加载词典数据,并将其存储为一个集合,以便后续的情感分析使用。
这个函数在情感分析中起着关键角色,负责加载和管理各种情感词典。通过这个函数,可以简化代码、提高效率,并确保情感分析的准确性和灵活性。因此,它是实现情感分析系统不可或缺的组成部分。
def load_dict(self, file): """Load dictionary"""with open(file, encoding='utf-8', errors='ignore') as fp:lines = fp.readlines()lines = [l.strip() for l in lines]print("Load data from file (%s) finished !" % file)dictionary = [word.strip() for word in lines]return set(dictionary)
作用与重要性就可以实现统一管理词典
1集中加载:通过 load_dict 函数,所有的情感词典(如正面词、负面词、否定词等)都可以通过简单的函数调用进行加载,避免了重复代码。
2便于维护:如果需要更新词典,只需修改文件内容即可,而不必更改代码逻辑。
1.3 切分句子
1.3.1为什么划分
在情感分析中,一个句子可能包含多个分句,而这些分句所传达的情感可能截然不同。一个切分函数在这种情况下显得尤其重要,需要将复杂句子拆分为独立的子句,从而确保对每个分句的情感进行准确分析。
例如:
- 虽然这个产品性能很好,但它的价格却很高,我觉得不太划算。"
分割之后:
- [‘虽然这个产品性能很好’, ‘但它的价格却很高’, ‘我觉得不太划算’]
情感分析的应用
- 逐句情感评估:
第一句:“虽然这个产品性能很好”表达了正面情感。
第二句:“但它的价格却很高”引入了负面情感,暗示价格是一个问题。
第三句:“我觉得不太划算”进一步强调了负面情感。 - 情感冲突识别:
通过分句,情感分析可以清楚地识别出文本中的情感冲突。第一句的正面情感和后两句的负面情感形成对比,表明用户对产品的综合评价并不完全积极。 - 综合情感得分:
通过分析每个分句的情感,分析系统可以计算出整体情感得分,可能得出一个中性或略偏负面的结论。这种方法比简单分析整个句子要准确得多,因为它考虑了句子内部的复杂情感变化。
1.3.2 划分代码
我们可以借助正则表达式。使用正则表达式将输入的长文本分割成多个短句,能够识别多种标点符号(如句号、问号、感叹号等)作为分隔符。
同时需要去除空字符串,这样确保返回的结果中不包含空字符串,返回有效的子句列表。
def sentence_split_regex(self, sentence):"""Segmentation of sentence"""if sentence is not None:sentence = re.sub(r"–+|—+", "-", sentence)sub_sentence = re.split(r"[。,,!!??;;\s…~~]+|\.{2,}|…+| +|_n|_t", sentence)sub_sentence = [s for s in sub_sentence if s != '']if sub_sentence != []:return sub_sentenceelse:return [sentence]return []
1.4 完整代码
import reclass ToolGeneral():"""Tool function"""def is_odd(self,num):if num % 2 == 0:return 'even'else:return 'odd' def load_dict(self,file): """Load dictionary"""with open(file,encoding='utf-8',errors='ignore') as fp:lines = fp.readlines()lines = [l.strip() for l in lines]print("Load data from file (%s) finished !"%file)dictionary = [word.strip() for word in lines]return set(dictionary)def sentence_split_regex(self,sentence):"""Segmentation of sentence"""if sentence is not None:sentence = re.sub(r"–+|—+", "-", sentence)sub_sentence = re.split(r"[。,,!!??;;\s…~~]+|\.{2,}|…+| +|_n|_t", sentence)sub_sentence = [s for s in sub_sentence if s != '']if sub_sentence != []:return sub_sentenceelse:return [sentence]return []if __name__ == "__main__": #tool = ToolGeneral() #s = '我今天你现在在干嘛。昨天上午,还有现在'ls = tool.sentence_split_regex(s)print(ls)
结果:

2.导入词典
-
环境准备
首先,确保你已经导入必要的库,并且定义了 ToolGeneral 类。你还需要确保字典文件的路径正确。 -
Hyperparams 类的定义
接下来,我们定义一个名为 Hyperparams 的类,其中包含多个静态属性,这些属性用于加载不同的情感字典和副词字典。 -
加载情感字典
在 Hyperparams 类中,我们通过调用 load_dict 方法来加载情感字典。这些字典通常用于情感分析,分别表示否定词、正面词和负面词。
import ostool = ToolGeneral()
pwd = os.getcwd()class Hyperparams:'''Hyper parameters'''# Load sentiment dictionarydeny_word = tool.load_dict(os.path.join(pwd,'dict','not.txt'))posdict = tool.load_dict(os.path.join(pwd,'dict','positive.txt'))negdict = tool.load_dict(os.path.join(pwd,'dict', 'negative.txt'))pos_neg_dict = posdict|negdict# Load adverb dictionarymostdict = tool.load_dict(os.path.join(pwd,'dict','most.txt'))verydict = tool.load_dict(os.path.join(pwd,'dict','very.txt'))moredict = tool.load_dict(os.path.join(pwd,'dict','more.txt'))ishdict = tool.load_dict(os.path.join(pwd,'dict','ish.txt'))insufficientlydict = tool.load_dict(os.path.join(pwd,'dict','insufficiently.txt'))overdict = tool.load_dict(os.path.join(pwd,'dict','over.txt'))inversedict = tool.load_dict(os.path.join(pwd,'dict','inverse.txt'))
导入成功就会现实finish

这些词典包含了否定词

积极情感词,和消极情感词


为了保障这个精准度,那还需要程度词

以及包含了其他各种可能影响的词

3.中文情感分析算法思路
设计了一个情感分析的类 SentimentAnalysis,其主要功能是分析文本的情感倾向,返回正面和负面情感的分值。以下是逐步解析其实现思路的详细说明。
代码如下:
import os
import sys
import jieba
import numpy as nptool = ToolGeneral()
# jieba.load_userdict(os.path.join(os.path.dirname('./dict', 'dict','jieba_sentiment.txt'))
# dict_file = os.path.join(os.path.dirname(os.path.abspath('')), 'dict', 'jieba_sentiment.txt')class SentimentAnalysis():"""Sentiment Analysis with some dictionarys""" def sentiment_score_list(self,dataset):seg_sentence = tool.sentence_split_regex(dataset)count1,count2 = [],[]for sentence in seg_sentence: words = jieba.lcut(sentence, cut_all=False)i = 0 a = 0 for word in words:"""poscount 积极词的第一次分值;poscount2 积极反转后的分值;poscount3 积极词的最后分值(包括叹号的分值) """poscount,negcount,poscount2,negcount2,poscount3,negcount3 = 0,0,0,0,0,0 # if word in Hyperparams.posdict : if word in ['好','真','实在'] and words[min(i+1,len(words)-1)] in Hyperparams.pos_neg_dict and words[min(i+1,len(words)-1)] != word:continueelse:poscount +=1c = 0for w in words[a:i]: # 扫描情感词前的程度词if w in Hyperparams.mostdict:poscount *= 4elif w in Hyperparams.verydict:poscount *= 3 elif w in Hyperparams.moredict:poscount *= 2 elif w in Hyperparams.ishdict:poscount *= 0.5elif w in Hyperparams.insufficientlydict:poscount *= -0.3 elif w in Hyperparams.overdict:poscount *= -0.5 elif w in Hyperparams.inversedict: c+= 1else:poscount *= 1if tool.is_odd(c) == 'odd': # 扫描情感词前的否定词数poscount *= -1.0poscount2 += poscountposcount = 0poscount3 = poscount + poscount2 + poscount3poscount2 = 0else:poscount3 = poscount + poscount2 + poscount3poscount = 0a = i+1elif word in Hyperparams.negdict: # 消极情感的分析,与上面一致 if word in ['好','真','实在'] and words[min(i+1,len(words)-1)] in Hyperparams.pos_neg_dict and words[min(i+1,len(words)-1)] != word:continueelse:negcount += 1d = 0for w in words[a:i]: if w in Hyperparams.mostdict:negcount *= 4elif w in Hyperparams.verydict:negcount *= 3elif w in Hyperparams.moredict:negcount *= 2elif w in Hyperparams.ishdict:negcount *= 0.5elif w in Hyperparams.insufficientlydict:negcount *= -0.3elif w in Hyperparams.overdict:negcount *= -0.5elif w in Hyperparams.inversedict:d += 1else:negcount *= 1if tool.is_odd(d) == 'odd':negcount *= -1.0negcount2 += negcountnegcount = 0negcount3 = negcount + negcount2 + negcount3negcount2 = 0else:negcount3 = negcount + negcount2 + negcount3negcount = 0a = i + 1 i += 1pos_count = poscount3neg_count = negcount3count1.append([pos_count,neg_count]) if words[-1] in ['!','!']:# 扫描感叹号前的情感词,发现后权值*2count1 = [[j*2 for j in c] for c in count1]for w_im in ['但是','但']:if w_im in words : # 扫描但是后面的情感词,发现后权值*5ind = words.index(w_im)count1_head = count1[:ind]count1_tail = count1[ind:] count1_tail_new = [[j*5 for j in c] for c in count1_tail]count1 = []count1.extend(count1_head)count1.extend(count1_tail_new)break if words[-1] in ['?','?']:# 扫描是否有问好,发现后为负面count1 = [[0,2]]count2.append(count1)count1=[]return count2def sentiment_score(self,s):senti_score_list = self.sentiment_score_list(s)if senti_score_list != []:negatives=[]positives=[]for review in senti_score_list:score_array = np.array(review)AvgPos = np.sum(score_array[:,0])AvgNeg = np.sum(score_array[:,1]) negatives.append(AvgNeg)positives.append(AvgPos) pos_score = np.mean(positives) neg_score = np.mean(negatives)if pos_score >=0 and neg_score<=0:pos_score = pos_scoreneg_score = abs(neg_score)elif pos_score >=0 and neg_score>=0:pos_score = pos_scoreneg_score = neg_score else:pos_score,neg_score=0,0return pos_score,neg_scoredef normalization_score(self,sent):score1,score0 = self.sentiment_score(sent)if score1 > 4 and score0 > 4:if score1 >= score0:_score1 = 1_score0 = score0/score1 elif score1 < score0:_score0 = 1_score1 = score1/score0 else :if score1 >= 4 :_score1 = 1elif score1 < 4 :_score1 = score1/4if score0 >= 4 :_score0 = 1elif score0 < 4 :_score0 = score0/4 return _score1,_score0
4.1情感词获取思路
- 情感分值列表计算
def sentiment_score_list(self, dataset):
该方法接收一个数据集(文本)并返回每个句子的情感分值列表。
2句子切分,用上面定义的方法进行切分句子
其中,seg_sentence = tool.sentence_split_regex(dataset)。使用 sentence_split_regex 方法将输入文本分割成独立句子。
count1, count2 = [], [] count1 用于存储每个句子的情感分值,count2 用于存储所有句子的情感分值。
3 使用下面的算法遍历每个句子
for sentence in seg_sentence:words = jieba.lcut(sentence, cut_all=False)
对每个句子进行分词,得到词汇列表。
4 情感词分析
for word in words:poscount, negcount, poscount2, negcount2, poscount3, negcount3 = 0, 0, 0, 0, 0, 0```
初始化情感计数器:正面和负面情感的计数器以及它们的临时值。5 正面情感词处理
```python
if word in Hyperparams.posdict:
检查当前词是否在正面词典中。
如果是,遍历其之前的词,分析程度词的影响并调整 poscount。
5.1 程度词影响
if w in Hyperparams.mostdict:poscount *= 4 # 加强
根据程度词(如 “非常”、“极其” 等)调整正面情感的分值。
5.2 否定词处理
if tool.is_odd(c) == 'odd':poscount *= -1.0
检查是否存在奇数个否定词,如果存在,反转正面情感的得分。
6 负面情感词处理
elif word in Hyperparams.negdict:
与正面情感处理类似,检查当前词是否在负面词典中,并进行相应分析。
7 特殊情况处理
检查句子末尾的感叹号和问号,影响情感得分。
if words[-1] in ['!','!']:count1 = [[j*2 for j in c] for c in count1]
如果句子以感叹号结尾,将情感分值加倍。
4.2 计算情感分值
sentiment_score 这段代码通过计算输入文本中每个句子的情感得分,最终得出整体的正面和负面分值。它有效地整合了多句子的情感分析结果,考虑了分值的符号和特殊情况,确保了返回的情感得分具有合理性和准确性。这种方法适用于对评论或长文本进行情感倾向的评估。
def sentiment_score(self, s):
该方法计算输入文本的整体情感得分。
1 获取情感分值列表
senti_score_list = self.sentiment_score_list(s)
调用 sentiment_score_list 方法获取每个句子的情感分值。
2 计算平均分值
AvgPos = np.sum(score_array[:,0])
AvgNeg = np.sum(score_array[:,1])
计算所有句子正面和负面情感的平均分值。
4.3 得分的归一化处理
为了对情感分值进行合理的归一化处理,以便在不同情感强度的情况下保持分值的可比性和一致性。通过这种方式,分析结果可以更清晰地反映出文本的情感倾向,同时在高分和低分情况下采取不同的归一化策略,以适应不同的情感表达强度。这样的设计使得情感分析结果在实际应用中更具实用性和可解释性
def normalization_score(self, sent):
- 高分情况下的处理
if score1 >= score0:_score1 = 1_score0 = score0 / score1
elif score1 < score0:_score0 = 1_score1 = score1 / score0
该方法对情感得分进行归一化处理,返回标准化后的正面和负面分值。
根据正面和负面分值的大小关系进行归一化,使得分值在一定范围内更加平衡和可比较。
归一化逻辑:
如果正面得分大于或等于负面得分,设置正面得分 _score1 为 1,并将负面得分 _score0 归一化为其相对于正面得分的比例。
反之,如果负面得分更高,设置负面得分 _score0 为 1,并将正面得分 _score1 归一化为其相对于负面得分的比例。
else:if score1 >= 4:_score1 = 1elif score1 < 4:_score1 = score1 / 4if score0 >= 4:_score0 = 1elif score0 < 4:_score0 = score0 / 4
处理低分情况:
如果正面得分大于或等于 4,则将其归一化为 1。
如果正面得分小于 4,则将其归一化为其与 4 的比例。
对负面得分采用相同的逻辑。
这部分设计意图在于确保即使在情感表达较弱的情况下,分值也能在一个合理的范围内进行比较和理解。
4.实证
#计算完一条评论所有分句的情感值([正面分值, 负面分值]),用数组(list) 记录起来。
sa = SentimentAnalysis()
text = '虽然这个产品性能很好,但它的价格却很高,我觉得不太划算'
print(sa.normalization_score(text))
(0.25, 0.08333333333333333)
这样就可以得到正面和负面的情感得分,判断出来情感倾向
5.总结
本次代码通过分词、情感词典分析、程度词和否定词处理等步骤,构建了一个完整的情感分析流程。它能够从输入的文本中提取情感信息,并计算出正面和负面的情感得分,最终提供一个归一化的情感评分。通过这种方式,情感分析能够有效地捕捉文本中的情感表达,支持情感理解和决策。
代码词典获取链接,点赞关注,失效留言,或私信,提取码1111
相关文章:
【学术小白的学习之路】基于情感词典的中文句子情感分析(代码词典获取在结尾)
【学术小白的学习之路】基于情感词典的情感分析 1.基础函数1.1 判断情感词的否定词数量1.2 导入情感词典1.3 切分句子1.3.1为什么划分1.3.2 划分代码 1.4 完整代码 2.导入词典3.中文情感分析算法思路4.1情感词获取思路4.2 计算情感分值4.3 得分的归一化处理 4.实证5.总结 本文的…...
Linux 中 grep、sed、awk 命令
1. awk:强大的文本分析工具 awk,全称“Awk语言”,是一种专门用于处理文本文件的语言。它不仅能够根据关键字匹配某一行,还能进行复杂的文本分析和处理。awk的语法简洁明了,功能强大,是文本处理领域的佼佼者…...
一起考高项啊--现代化基础设施(工业互联网)
1、工业互联网的内涵和外延 工业互联网不是互联网在工作的简单应用,是具有更为丰富的内涵和外延。 它既是工业数字化、网络化、智能化转型的基础设施,也是互联网、大数据、人工智能与实体经济深度融合的应用模式,同时也是一种新业态、新产业…...
python学opencv|读取图像(二十)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
期权懂|如何减小个股期权交易中的风险?
锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 如何减小个股期权交易中的风险? 一、选择合适的期权合约 (1)选择活跃的期权合约:投资者应优先选择交易活跃的期权合约。交易活跃的…...
ubuntu20.04 wget下载--段错误 (核心已转储)
用wget下载时总是在快下载完成时遇到段错误 untu2004-9.1.0_1.0-1_am 99%[> ] 1.63G 3.11MB/s 剩余 1s s段错误 (核心已转储)有以下两种解决方法: 1.手动下载 wget后面就是要下载的资源的链接,直接复制到浏览器中下载即可 如:…...
怎么样保持mysql和redis数据一致性
保持 MySQL 和 Redis 数据的一致性是一个常见的挑战,因为 MySQL 是传统的关系型数据库,而 Redis 是内存数据库,通常用于缓存和高性能存储。这两者的数据更新方式不同,特别是当 Redis 用作缓存时,可能会存在缓存和数据库之间的数据不一致问题。为了保持数据一致性,通常可以…...
剑指Offer|LCR 013. 二维区域和检索 - 矩阵不可变
LCR 013. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 实现 NumMatrix 类: NumMatrix(…...
aosp15 - Activity生命周期切换
本文探查的是,从App冷启动后到MainActivity生命周期切换的系统实现。 调试步骤 在com.android.server.wm.RootWindowContainer#attachApplication 方法下断点,为了attach目标进程在com.android.server.wm.ActivityTaskSupervisor#realStartActivityLock…...
vxe-table 虚拟滚动的动态响应
虚拟滚动主要是在有限范围内渲染想要显示的数据,主要体现在懒加载数据和动态渲染上。如何提高虚拟滚动的操作性呢?请看本章解析 1.什么是虚拟滚动?代码如何实现? VXE-Table提供了一种名为“虚拟滚动”的功能,该功能可…...
quasar dev 命令卡住很久
别以为这是一个瞬间的截图,其实停留在这里很久很久。 折腾挺久,无论npm run dev:proxy还是 quasar dev,都是一样的情况。 最终解决办法: 有语法问题,通过 quasar build 命令暴露出来错误所在的行数。...
黑盒RCE测试 异或测试
前言 了解了漏洞的原理之后就需要知道 他在哪能出现 并且被利用 这个还是很重要的 异或测试 使用异或(XOR)运算进行加密解密的原理_异或加密-CSDN博客 异或测试是在 白盒内执行的 一个例题看一下 输入什么都是会报错 这种情况就需要使用 异或计…...
kotlin中泛型中in和out的区别
概念含义 in关键字(逆变) 在Kotlin泛型中,in关键字主要用于定义逆变(Contravariance)。它表示一个泛型类型参数可以是指定类型或者它的超类型。简单来说,就是对于类型A和B,如果A是B的子类型&…...
c# iis 解决跨域问题
该错误是一个典型的跨域问题,说明从 http://www.fuc.com 发起的请求被目标服务器(https://aip.baidubce.com)拒绝,原因是目标服务器未返回正确的 AccessControlAllowOrigin 响应头。 解决方法 1. 了解问题的本质 CORS(…...
MySQL版本对应的mysql-connector-java版本下载地址
MySQL版本mysql-connector-java版本mysql-connector-java下载地址MySQL安装版下载地址MySQL免安装版下载地址5.1.x5.1.xmysql-connector-java 5.1.xMySQL Installer 5.1.xMySQL Community Server 5.1.x5.5.x5.1.x, 5.5.x mysql-connector-java 5.1.x, mysql-connector-java 5.5…...
【读书笔记】《论语别裁》爱与罪
一、内容摘要 《论语别裁》第01章讨论了孔子关于孝悌的思想,以及其在中国文化中的重要性和复杂性。文中引用了有子的观点,强调孝弟是为人之本。然而,随着历史的发展,孔子的思想也被误解或被用作维护专制统治的工具。通过司马迁的…...
uniApp上传文件踩坑日记
最近在做移动端app,开始接触uniapp。想着直接用PC端的前后端API去做文件上传,但是uniapp的底层把请求拆成了普通请求和文件上传请求,所以不能用一个axios去做所有请求的处理,拆成uni.request和uni.uploadFile去分别处理两种情况。…...
Webhook 是什么?详解其工作原理
在现代技术中,一切都相互连接,每个应用程序通过许多服务的组合和协调实现无缝工作。这种协调是通过 webhooks 实现的。 Webhooks 是基于 HTTP 的回调函数,其中一个服务使用 API 立即通知另一个服务发生的事件。这就是简单的版本。从技术上讲…...
log4j2漏洞复现(CVE-2021-44228)
靶场环境 步骤一:设置出战规则 步骤二:开启靶场 cd vulhub cd log4j cd CVE-2021-44228 docker-compose up -d docker ps 访问端口 靶机开启 步骤三:外带注入 获得dnslog 靶机访问dnslog 得到dnslog的二级域名信息 步骤四:构造…...
tcpdump抓包分析
使用tcpdump进行抓包分析是一个常见的网络诊断和分析任务。以下是如何使用tcpdump进行抓包和分析的一些基本步骤和技巧: 1. 基本抓包 首先,你需要确定要抓取数据包的网络接口。可以使用ifconfig或ip addr命令查看网络接口。然后,使用以下命…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
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…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
