基于共词分析的中国近代史实体关系图构建(毕业设计:数据处理)

news/2024/5/3 6:27:23/文章来源:https://blog.csdn.net/m0_46312299/article/details/126641233

研究方法

为了体现一些历史人物、地点、事件的关联,需要抽取文本中的重要三元组信息。三元组信息有两种表达形式:实体-关系-实体或实体-属性-性值。对应着两种实体联系。前者称它为实体关系,如李大钊参与五四革命。后者称它实体属性,如林徽因的父亲林长民。对于实体属性值,本文提取了百度词条半结构化数据中的标记链接,不仅抽取实体同时获取了实体与值的属性关系。由谓词连接的实体-关系-实体这类关系使用的则是LTP工具。LTP可以从非结构化文本中直接提取出三元组关系,但它的抽取结果粗糙不能用于构建需要表达精确的历史信息。如下图
在这里插入图片描述

研究难点

直接使用LTP抽取三元组主要有两个问题待解决:实体消歧以及共指消解。结合表来说:(鸦片战争中国社会,是,封建社会),中国社会和封建社会是相关概念,(英国,发动,中国鸦片战争)与(鸦片战争,爆发到,中华人民共和国)中信息重复,(鸦片战争,是,资本帝国主义列强侵略战争)更简洁的表达为(鸦片战争,是,侵略战争),(帝国主义,发动,侵略战争),(帝国主义,是,资本主义)。(这有点像数据库里的最优范式了)。

研究方法

为了解决以上问题,本文在使用LTP工具完成粗略的事件抽取后,使用共词分析来确定更重要的三元组,用LAC命名实体识别工具,优化三元组中实体抽取的结果。
在这里插入图片描述

工作

OCR从教材图片中提取文字

在网上找了个遍都没有找到中国近代史的完整文本、毕竟还是有版权的,还是自己动手用ocr提取吧
python 提取视频字幕
注意用ocr之前一定要压缩图片

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Jun 12 09:37:38 2018
利用百度api实现图片文本识别
@author: XnCSD
"""import glob
from os import path
import os
from aip import AipOcr
from PIL import Imagedef convertimg(picfile, outdir):'''调整图片大小,对于过大的图片进行压缩picfile:    图片路径outdir:    图片输出路径'''img = Image.open(picfile)width, height = img.sizewhile(width*height > 4000000):  # 该数值压缩后的图片大约 两百多kwidth = width // 2height = height // 2new_img=img.resize((width, height),Image.BILINEAR)new_img.save(path.join(outdir,os.path.basename(picfile)))def baiduOCR(picfile, outfile):"""利用百度api识别文本,并保存提取的文字picfile:    图片文件名outfile:    输出文件"""filename = path.basename(picfile)APP_ID = '******' # 刚才获取的 ID,下同API_KEY = '******'SECRECT_KEY = '******'client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)i = open(picfile, 'rb')img = i.read()print("正在识别图片:\t" + filename)message = client.basicGeneral(img)   # 通用文字识别,每天 50 000 次免费#message = client.basicAccurate(img)   # 通用文字高精度识别,每天 800 次免费print("识别成功!")i.close();with open(outfile, 'a+') as fo:fo.writelines("+" * 60 + '\n')fo.writelines("识别图片:\t" + filename + "\n" * 2)fo.writelines("文本内容:\n")# 输出文本内容for text in message.get('words_result'):fo.writelines(text.get('words') + '\n')fo.writelines('\n'*2)print("文本导出成功!")print()if __name__ == "__main__":outfile = 'export.txt'outdir = 'tmp'if path.exists(outfile):os.remove(outfile)if not path.exists(outdir):os.mkdir(outdir)print("压缩过大的图片...")// 首先对过大的图片进行压缩,以提高识别速度,将压缩的图片保存与临时文件夹中for picfile in glob.glob("picture/*"):convertimg(picfile, outdir)print("图片识别...")for picfile in glob.glob("tmp/*"):baiduOCR(picfile, outfile)os.remove(picfile)print('图片文本提取结束!文本输出结果位于 %s 文件中。' % outfile)os.removedirs(outdir)

为了减少三元组抽取中一次的工作量,把一本书的内容放在12个文件中
在这里插入图片描述

LTP抽取三元组

LTP 原理介绍
ltp用训练好的模型来完成一些nlp任务,这个工具还挺难下载的,这里附上资源
链接:https://pan.baidu.com/s/1YkGOkU3RShI25DuLuEAvDw
提取码:muqi

sentence_parser

# -*- coding: utf-8 -*-
import os
from pyltp import Segmentor, Postagger, Parser, NamedEntityRecognizer, SementicRoleLabeller
# pip install pyltp -i https://pypi.tuna.tsinghua.edu.cn/simple 可以先下载好whl文件
#LTP语言平台:http://ltp.ai/index.html
#咱们使用的工具包,pyltp:https://pyltp.readthedocs.io/zh_CN/latest/api.html
#LTP附录:https://ltp.readthedocs.io/zh_CN/latest/appendix.html#id3
#安装方法:https://github.com/HIT-SCIR/pyltp
class LtpParser: #初始化def __init__(self):LTP_DIR = "./ltp_data_v3.4.0"# 定义分词器self.segmentor = Segmentor()self.segmentor.load(os.path.join(LTP_DIR, "cws.model"))# 词性标注self.postagger = Postagger()self.postagger.load(os.path.join(LTP_DIR, "pos.model"))self.parser = Parser()self.parser.load(os.path.join(LTP_DIR, "parser.model"))self.recognizer = NamedEntityRecognizer()self.recognizer.load(os.path.join(LTP_DIR, "ner.model"))self.labeller = SementicRoleLabeller()self.labeller.load(os.path.join(LTP_DIR, 'pisrl_win.model'))'''语义角色标注'''def format_labelrole(self, words, postags):arcs = self.parser.parse(words, postags)roles = self.labeller.label(words, postags, arcs)roles_dict = {}for role in roles:roles_dict[role.index] = {arg.name:[arg.name,arg.range.start, arg.range.end] for arg in role.arguments}return roles_dict'''句法分析---为句子中的每个词语维护一个保存句法依存儿子节点的字典'''def build_parse_child_dict(self, words, postags, arcs):child_dict_list = []format_parse_list = []for index in range(len(words)):child_dict = dict()for arc_index in range(len(arcs)):if arcs[arc_index].head == index+1:   #arcs的索引从1开始 arc. head 表示依存弧的父结点的索引。 ROOT 节点的索引是 0 ,第一个词开始的索引依次为1,2,3,···arc. relation 表示依存弧的关系。if arcs[arc_index].relation in child_dict:child_dict[arcs[arc_index].relation].append(arc_index)#添加else:child_dict[arcs[arc_index].relation] = []#新建child_dict[arcs[arc_index].relation].append(arc_index)child_dict_list.append(child_dict)# 每个词对应的依存关系父节点和其关系rely_id = [arc.head for arc in arcs]  # 提取依存父节点idrelation = [arc.relation for arc in arcs]  # 提取依存关系heads = ['Root' if id == 0 else words[id - 1] for id in rely_id]  # 匹配依存父节点词语for i in range(len(words)):a = [relation[i], words[i], i, postags[i], heads[i], rely_id[i]-1, postags[rely_id[i]-1]]format_parse_list.append(a)return child_dict_list, format_parse_list'''parser主函数'''def parser_main(self, sentence):words = list(self.segmentor.segment(sentence))postags = list(self.postagger.postag(words))arcs = self.parser.parse(words, postags)child_dict_list, format_parse_list = self.build_parse_child_dict(words, postags, arcs)roles_dict = self.format_labelrole(words, postags)return words, postags, child_dict_list, roles_dict, format_parse_listif __name__ == '__main__':parse = LtpParser()#sentence = '我想听一首迪哥的歌'sentence = '奥巴马昨晚在白宫发表了演说'words, postags, child_dict_list, roles_dict, format_parse_list = parse.parser_main(sentence)print(words, len(words))print(postags, len(postags))print(child_dict_list, len(child_dict_list))print(roles_dict)print(format_parse_list, len(format_parse_list))

triiple_extraction

from sentence_parser import *
import re
import glob
#LTP语言平台:http://ltp.ai/index.html
#咱们使用的工具包,pyltp:https://pyltp.readthedocs.io/zh_CN/latest/api.html
#LTP附录:https://ltp.readthedocs.io/zh_CN/latest/appendix.html#id3
#安装方法:https://github.com/HIT-SCIR/pyltpclass TripleExtractor:def __init__(self):self.parser = LtpParser()'''文章分句处理, 切分长句,冒号,分号,感叹号等做切分标识'''def split_sents(self, content):return [sentence for sentence in re.split(r'[??!!。;;::\n\r]', content) if sentence]'''利用语义角色标注,直接获取主谓宾三元组,基于A0,A1,A2'''def ruler1(self, words, postags, roles_dict, role_index):v = words[role_index]role_info = roles_dict[role_index]if 'A0' in role_info.keys() and 'A1' in role_info.keys():s = ''.join([words[word_index] for word_index in range(role_info['A0'][1], role_info['A0'][2]+1) ifpostags[word_index][0] not in ['w', 'u', 'x'] and words[word_index]])o = ''.join([words[word_index] for word_index in range(role_info['A1'][1], role_info['A1'][2]+1) ifpostags[word_index][0] not in ['w', 'u', 'x'] and words[word_index]])if s  and o:return '1', [s, v, o]return '4', []'''三元组抽取主函数'''def ruler2(self, words, postags, child_dict_list, arcs, roles_dict):svos = []for index in range(len(postags)):tmp = 1# 先借助语义角色标注的结果,进行三元组抽取if index in roles_dict:flag, triple = self.ruler1(words, postags, roles_dict, index)if flag == '1':svos.append(triple)tmp = 0if tmp == 1:# 如果语义角色标记为空,则使用依存句法进行抽取# if postags[index] == 'v':if postags[index]:# 抽取以谓词为中心的事实三元组child_dict = child_dict_list[index]# 主谓宾if 'SBV' in child_dict and 'VOB' in child_dict:r = words[index]e1 = self.complete_e(words, postags, child_dict_list, child_dict['SBV'][0])e2 = self.complete_e(words, postags, child_dict_list, child_dict['VOB'][0])svos.append([e1, r, e2])# 定语后置,动宾关系relation = arcs[index][0]head = arcs[index][2]if relation == 'ATT':if 'VOB' in child_dict:e1 = self.complete_e(words, postags, child_dict_list, head - 1)r = words[index]e2 = self.complete_e(words, postags, child_dict_list, child_dict['VOB'][0])temp_string = r + e2if temp_string == e1[:len(temp_string)]:e1 = e1[len(temp_string):]if temp_string not in e1:svos.append([e1, r, e2])# 含有介宾关系的主谓动补关系if 'SBV' in child_dict and 'CMP' in child_dict:e1 = self.complete_e(words, postags, child_dict_list, child_dict['SBV'][0])cmp_index = child_dict['CMP'][0]r = words[index] + words[cmp_index]if 'POB' in child_dict_list[cmp_index]:e2 = self.complete_e(words, postags, child_dict_list, child_dict_list[cmp_index]['POB'][0])svos.append([e1, r, e2])return svos'''对找出的主语或者宾语进行扩展'''def complete_e(self, words, postags, child_dict_list, word_index):child_dict = child_dict_list[word_index]prefix = ''if 'ATT' in child_dict:for i in range(len(child_dict['ATT'])):prefix += self.complete_e(words, postags, child_dict_list, child_dict['ATT'][i])postfix = ''if postags[word_index] == 'v':if 'VOB' in child_dict:postfix += self.complete_e(words, postags, child_dict_list, child_dict['VOB'][0])if 'SBV' in child_dict:prefix = self.complete_e(words, postags, child_dict_list, child_dict['SBV'][0]) + prefixreturn prefix + words[word_index] + postfix'''程序主控函数'''def triples_main(self, content):sentences = self.split_sents(content)svos = []for sentence in sentences:words, postags, child_dict_list, roles_dict, arcs = self.parser.parser_main(sentence)svo = self.ruler2(words, postags, child_dict_list, arcs, roles_dict)svos += svoreturn svos
'''测试'''
def test():cnt=0if os.path.exists("triple_txt"):passelse :os.mkdir("triple_txt")try:for txt in  glob.glob("text/*"):with open(txt,encoding="ansi",mode="r") as f:content5=f.read()#content5 = '我购买了一件玩具,孩子非常喜欢这个玩具,但是质量不太好。希望商家能够保障商品质量,不要再出现类似问题。'extractor = TripleExtractor()svos = extractor.triples_main(content5)outfile =os.path.join("triple_txt", os.path.basename(txt)+".txt")with open(outfile,"w",encoding="utf-8") as f:f.write(str(svos))except Exception as e:print(e)
test()

输入文本:content5、输出到triple_text目录下
在这里插入图片描述

共词分析确定主题词

共词分析的一般有以下四个步骤如图。首先,确定分析的文本数据;接着提取概念性术语等可以反映文本主题的分析单元,筛选出高频词;下一步统计高频词对的共现频率,构建共词矩阵;最后可视化共词网络,结合节点中心度确定主题词[29]。在实际情况中,根据研究内容的不同,可以将部分过程循环多次[30]。在实验部分,本研究也根据最后实际效果进行了适当的调整。

在这里插入图片描述为了确定共词网络中节点的影响力,不仅要考虑节点的词频还有考虑节点之间的相互影响[31]。学术界对网络节点影响力进行了深入研究,提出了中介中心度、亲密中心度、特征向量中心度、离心度,谐波亲密中心度等度量方法。文献[32]-[33]评估了各指标的适用性,且提出了在具体网络中选择指标的方法:分析网络中节点度数大的节点与各指标的相关性。
具体工作
完成三元组预处理工作(包括LAC细化实体和三元组、统计高频实体词、筛选重要的三元组)最后将筛选的三元组构建图谱。初步抽取的三元组关系有7830条,为了减少工作量,本文用LTP抽取的实体上用LAC进一步识别出粒度更小的实体,并用这些实体确定高频词后,直接用在原始的三元组筛选上,在初步选定的三元组上完成三元组的细化。
在这里插入图片描述

本文使用到了共词分析技术。一般情况下共词分析讨论的基本单元是一篇文档,本文使用的是一个三元组(合理性有待考量)

LAC 实体识别

from collections import Counter
import glob
import pandas as pd
import os
import re
from LAC import LACcnt = 0
times = 0
# 统计高频词
if os.path.exists("excel"):pass
else :os.mkdir("excel")
# 提取中文的函数
f=lambda a:''.join(re.findall('[\u4e00-\u9fa5]', a))# 命名实体识别工具
lac = LAC(mode='lac')
lac_result=lac.run('中国特色社会主义')
def co_ner(tmp:str):nlst=["n","ORG","PER","LOC"]lst=[]try:lac_result=lac.run(tmp)for i in range(len(lac_result[0])):w = lac_result[0][i]flag = lac_result[1][i]if flag in nlst or 'n' in flag:lst.append(w)except Exception as e:print(e)if lst != []:return lstelse :return [tmp]dic = []
for txt in glob.glob("triple_txt/*"):# if(cnt % 6 == 0):#     dic = []#     times = times + 1with open(txt,encoding='utf-8') as f:content=f.read()lst= content.split("],")for tri in lst:tri.strip(",,[]")dou=tri.split(",")if len(dou)==3:# item=[dou[0].strip("n[]\'\\").strip(),dou[2].strip("n[]\'\\").strip()]tmp1 = ''.join(re.findall('[\u4e00-\u9fa5]', dou[0]))tmp2 = ''.join(re.findall('[\u4e00-\u9fa5]', dou[2]))item = [tmp1, tmp2]for i in item:if i is not None and i != '':i = co_ner(i)dic.extend(i)r=Counter(dic)df=pd.Series(dict(r))df.to_excel(f"excel/词频_lac.xlsx")
import pandas as pd
from LAC import LAC
lac=LAC(mode='lac')
df = pd.read_excel("excel/词频_lac.xlsx")
lst=[]
special=["ORG","LOC","PER"]
for i in range(df.shape[0]):try:#  去掉小于2lac_result=lac.run(df.iloc[i,0])if lac_result[1][0] not in special and len(lac_result[0][0])<=2:continueelse :lst.append(df.iloc[i,:])except Exception as e:print(e)
df=pd.DataFrame(lst)
df.to_excel("excel/有效词频.xlsx")

建立共词矩阵

共词矩阵是高频词组成的二维矩阵,它的值表示两个高频词共同出现在一个三元组的次数。由于共词范围的缩小,扩大了共词统计的遍历范围,即为三元组.cvs中7830条数据,为了快速地从批量数据中确定是否有词对[node1,node2]的共词关系,分别利用Series.str.contains(node1)、Series.str.contains(node2)在触发者列和受事者列完成全元素的内容查询,当且仅当返回的两个布尔数组在同一index下都为TRUE,[node1,node2]才确定为共词

# co_word_high_freq
from collections import Counter
import glob
import pandas as pd
import os
import re
from ltp import LTP
from LAC import LAC
lac = LAC(mode='lac')
cnt = 0
times = 0
# 统计高频词
"""分析出实体以免重复lac 命名实体识别效果不是特别好 根据词性做一个预处理
"""
if os.path.exists("excel"):pass
else :os.mkdir("excel")
# 提取中文的函数
f=lambda a:''.join(re.findall('[\u4e00-\u9fa5]', a))# 命名实体识别工具
ltp = LTP()
ltp.init_dict(path="user_dict.txt", max_window=7)
def co_ner(tmp:str):nlst = [ "ORG", "PER", "LOC"]lst=[]try:lac_result = lac.run(tmp)for i in range(len(lac_result[0])):w = lac_result[0][i]flag = lac_result[1][i]if flag in nlst or ('n' in flag ):lst.append(w)except Exception as e:print(e)return lst# seg,hidden = ltp.seg([tmp])# nre = ltp.ner(hidden)# try:#     tag,start,end=nre[0][0]#     tmp = "".join(seg[0][start:end + 1])# except Exception as e:#     print(e)# return tmpdic = []
doulist=[]for txt in glob.glob("triple_txt/*"):# if(cnt % 6 == 0):#     dic = []#     times = times + 1with open(txt,encoding='utf-8') as f:content=f.read()lst= content.split("],")for tri in lst:flag = Truetri.strip(",,[]")dou=tri.split(",")if len(dou)==3:# item=[dou[0].strip("n[]\'\\").strip(),dou[2].strip("n[]\'\\").strip()]tmp1 = ''.join(re.findall('[\u4e00-\u9fa5]', dou[0]))tmp2 = ''.join(re.findall('[\u4e00-\u9fa5]', dou[2]))item = [tmp1, tmp2]if tmp1 is not None and tmp1 != '':tmp1=co_ner(tmp1)if tmp1!=[]:dic.extend(tmp1)if tmp2 is not None and tmp2 != '':tmp2=co_ner(tmp2)if tmp2!=[]:dic.extend(tmp2)#  都没有的就是没有价值的信息if(tmp1!=[] or tmp2 !=[]):doulist.append([''.join(tmp1),dou[1].strip(),''.join(tmp2)])## r=Counter(dic)# df=pd.Series(dict(r))# df.to_excel(f"excel/词频_optimize.xlsx")#r = Counter(doulist)df = pd.DataFrame(doulist)df.to_excel(f"excel/三元组.xlsx")
# co-word_matrix
import pandas as pd
from collections import Counter
import numpy as np
triple=pd.read_csv("excel/三元组.csv")
node = pd.read_csv("excel/有效词频.csv").iloc[:,0]
def judge( node1:str,node2:str):doulst1=pd.Series(triple.iloc[:, 0].values)doulst2=pd.Series(triple.iloc[ :,2].values)try:f = lambda x, y: pd.Series([(tur[0] and tur[1]) for tur in zip(x, y)])# str fillna 都是series独有 lst 没有的bol1=doulst1.str.contains(node1)bol2=doulst2.str.contains(node2)bol1=bol1.fillna(False)bol2=bol2.fillna(False)v = f(bol1, bol2)bol10 = doulst1.str.contains(node1)bol20 = doulst2.str.contains(node2)bol10 = bol10.fillna(False)bol20 = bol20.fillna(False)k = f(bol10, bol20)if np.sum(v)  != 0 or np.sum(k)!=0:return [node1,node2]except Exception as e:print(e)return Nonelst=[]
for i in range(len(node)):for j in range(len(node)):if(i!=j and j>i ) :k = judge(node[i],node[j])if k!=None:lst.append(" ".join(k))
r=Counter(lst)
df=pd.DataFrame(dict(r),index=[0])
df.to_csv("excel/matrix_pro.csv")

将边数据和高频词导入Gephi,得到高频共词矩阵构成的网络图
在这里插入图片描述

Gephi 计算中心度筛选主题词

计算中心度的指标有多个:亲密中心度、谐波亲密中心度、中介中心度、特征向量中心度。为了确定更优的度量指标,计算词频与各中心度的相关系数。
在这里插入图片描述
上表4-2展示了各中心度的指标与词频的相关系数,其中中介中心度的相关系数最大,表示这一变量和词频之间的关系越强,观察词频排在前50的节点中心度曲线图4-6。观察它们与词频之间变化的关系,可以发现其中亲密中心度和谐波亲密中心度的波动和异常点较小,变化趋势更接近词频。综上,将中介中心度作为评估节点影响。
在这里插入图片描述

# 有50 个点刻度只要标注其中 5 10 15
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib import font_manager
import os
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
my_font = font_manager.FontProperties(fname="AdobeHeitiStd-Regular.otf")d=pd.read_excel("excel/node_centrality.xlsx")
df=d.sort_values(by="词频", ascending=False)
df=df.reset_index(drop=True)
# x=df.loc[:50,"Id"]
fig,ax=plt.subplots()
ax2=ax.twinx()y1=df.loc[0:49,"词频"]
x= np.arange(50)y2=df.loc[0:49,"特征向量中心度"]l1,=ax.plot(x,y1,color='b')
# c coral deeppink https://finthon.com/matplotlib-color-list/ lawngreen
l2,=ax2.plot(x,y2,color='deeppink')
ax2.legend([l1, l2], ['词频', '特征向量中心度'],prop=my_font)
ax.set_ylabel('词频')
ax2.set_ylabel('特征向量中心度')
try:plt.savefig("img/特征向量中心度.png")
except Exception as e:print(e)
# print(df.unique())

将结果中中介中心度大于0的词作为主题词,并将它的中心度作为权重导入Gephi,根据权重观察各个主题词内容如下图4-7,从图中可以看到统一战线、马克思主义共产、中国特色社会主义等重要字眼。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_381838.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SocketLog 的基本使用

前言&#xff1a; 最近在封装一个日志类时&#xff0c;想借鉴一下 TP 的实现方式&#xff0c;特别注意了一下 TP 日志的驱动。平时常用文件形式记录日志却忽略了还有一个 Socket 方式&#xff0c;只需要连接一下远程服务&#xff0c;程序在单程运行中所打的日志就会出现在浏览器…

数据库操作查看用户名和端口,以及如何Mac 版本idea 如何实现JDBC和MySql建立连接,以及如何操作数据以及连接时出现的常见错误

文章目录1.数据库操作查看用户名&#xff08;1&#xff09;查看用户名&#xff08;2&#xff09;查看端口号(3)注意事项2.json&#xff1a;数据交换格式。3.JDBC和数据库建立连接后&#xff0c;如何进行操作数据库数据4.利用JDBC连接数据库时出现&#xff1a;5.如何让Mac 版ide…

Deep Recurrent Q-Learning for Partially Observable MDPs(DRQN)

Abstract 深度RL已经为复杂的任务提供了精通的控制器。但是&#xff0c;这些控制器的内存有限&#xff0c;并且依赖于能够在每个决策点感知完整的游戏画面。为了解决这些缺点&#xff0c;本文研究了用循环LSTM替换卷积后的第一个全连接层&#xff0c;从而在DQN中增加循环的影响…

springBoot 源码二:各种条件注解解析

springboot各种条件注解解析 上一篇分析了springboot的自动配置过程。springboot拿到了需要自动配置的全类名&#xff0c;去加载那些自动配置类。就以springboot自动配置的tomcat举例。会根据不同的条件注解来判断是否加载配置类 那么springboot的条件注解有哪些呢&#xff1…

Java毕业设计-网上宠物店系统

&#x1f525;作者主页&#xff1a;疯狂行者&#x1f525; &#x1f496;✌java领域优质创作者,专注于Java技术领域技术交流✌&#x1f496; &#x1f496;文末获取源码&#x1f496; 精彩专栏推荐订阅&#xff1a;在 下方专栏&#x1f447;&#x1f3fb;&#x1f447;&#x1…

一文看懂yolov7;yolov7详解

*免责声明: 1\此方法仅提供参考 2\搬了其他博主的操作方法,以贴上路径. 3* 场景一:yolo v7 场景二:yolo系列未完待续 … Yolo系列强推–>Yolo v1–v5 、 Yolox 场景一:yolo v7 强推先看–>yolov7基础知识先导篇 Yolov7论文地址 Yolov7的github项目地址 操作强推…

Linux环境详解

目录 vim的详细解绍 程序运行过程(C) Linux调试器——gdb 制作进度条 在Linux中使用gitee vim的详细解绍 vim的概念 vim是一个文本编辑器(多模式的编辑器)&#xff0c;从定位上&#xff0c;和记事本没有任何差别&#xff0c;是vi的前身 vim的主要三种模式 命令模式&a…

2022“杭电杯”中国大学生算法设计超级联赛(5)

Bragging Dice 两个人掷骰子&#xff0c;两人都知道对方手中和自己手中的牌数&#xff0c;现在有两种操作&#xff0c;一种是挑战&#xff0c;即打开盖子&#xff0c;看是否是前一人说的那样&#xff1b;另一种是声称&#xff0c;即给出判断&#xff0c;类似有x个y点的骰子这样…

[MySQL数据库部署及初始化相关]

一、MySQL安装前系统环境检测 1.selinux和iptables需要关闭 cat /etc/sysconfig/selinux sed -i s/enable/disable/g /etc/sysconfig/selinuxchkconfig --list|grep iptables chkconfig iptables off chkconfig --list|grep iptables2.I/O调度系统默认是cfq模式&#x…

IDEA 创建 Servelet 项目

本文主要讲述如何在 idea 中添加 Servelet &#xff0c;适合初学者及从 Eclipse 开发工具转为 IDEA 的开发人员学习 环境介绍 系统环境&#xff1a;win11 开发工具版本&#xff1a;IntelliJ IDEA 2022.2.1 项目创建及配置流程 1.创建 Java 项目 2.添加框架支持 3.添加 classes…

如何仅使用 CSS 创建响应式网站

如何仅使用 CSS 创建响应式网站 使用 vw 和 rem 构建响应式页面。Photo by 用户体验商店 on 不飞溅 前言 从移动浏览器或应用程序访问的网站越来越多。对我来说,在空闲时间,我基本上是用手机访问网站。移动浏览器对用户来说很方便,但对开发人员来说却是痛苦的,因为屏幕大…

概述:隐式神经表示(Implicit Neural Representations,INRs)

隐式神经表示&#xff08;Implicit Neural Representations&#xff0c;INRs&#xff09;1 简介1.1 传统的隐式表示1.1.1 代数表示1.1.2 函数表示1.1.3 水平集表示&#xff08;level set&#xff09;1.2 什么是隐式神经表示1.3 隐式神经表示的优缺点1.3.1 优点1.3.2 缺点2 应用…

GD32(7)程序烧录及运行

目录简介启动方式Boot00&#xff0c;Boot1xBoot01&#xff0c;Boot10Boot01&#xff0c;Boot11烧录方式ICPISPIAPIAP的作用IAP与ICP、ISP的运行差别IAP的Bootloader程序实现IAP的APP程序实现简介 微控制器在硬件中作为核心&#xff0c;通过执行保存在内部存储器中的程序&#x…

网站安全防护措施有哪些

想要我们的网站在网络中安全稳定运行&#xff0c;网站安全防护是不可或缺的环节&#xff0c;那么网站安全防护需要做哪些措施呢&#xff0c;这些措施能起到什么作用呢&#xff0c;接下来一起跟着小编一起来看看吧。 服务器安全狗和网站安全狗2022新版更新 更有效帮助用户防护网…

精品基于Uniapp+SSM实现的公园植物介绍APP

《[含文档PPT源码等]精品基于UniappSSM实现的公园植物介绍APP[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务…

设备通过国标GB28181/海康Ehome接入EasyCVR,视频无法打开的原因分析及解决方法

EasyCVR平台支持多类型设备、多协议方式接入&#xff0c;包括市场主流标准协议国标GB/T28181、RTMP、RTSP/Onvif协议等&#xff0c;以及厂家私有协议&#xff0c;如海康SDK、大华SDK、海康Ehome等。平台可将接入的流媒体进行处理及分发&#xff0c;分发的视频格式包括RTSP、RTM…

Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON

Swift Practice # 172 Swift 取得网页资料并制作台湾乡镇气象连结JSON 上一篇解决了使用Google Admob套件所产生的Link问题,让广告可以顺利显示。 [ Swift Practice # 171 Google Admod 闪退之-ObjC Linker 与SPM 上一篇简单的练习改变SwiftUI Map的显示比例,达到所有显示资料…

python3 词频统计计数分析+可视化词云 jieba+wordcloud 数据分析

hi&#xff0c; 大家好&#xff0c;我是宋哈哈&#xff0c;今天分享一个利用 python 的 jieba 库 和 wordcloud 词云库 做一个字符串的词频分析和词云可视化 编程环境&#xff1a; python 版本&#xff1a;3.6.8 编辑器&#xff1a;pycharm 2020.1.3 专业版 系统环境&#xff1…

使用聚类(K-means)分析方法对骑手进行分类标签定义

什么是聚类分析 聚类分析的目标就是在相似的基础上收集数据来分类&#xff0c;属于无监督学习。就是通过行为数据&#xff0c;通过算法将相似的人群聚集在一起&#xff0c;形成不带标签的人群簇。再人为的对人群簇进行分析&#xff0c;寻找特征标签。 一、数据构建 根据骑手的…

电脑重装系统开机后运行慢怎么办

小编就给大家分享四个电脑运行慢的方法&#xff0c;可以选择适合自己的方法去使用&#xff0c;一般情况都是可以解决掉电脑开机后运行慢的问题&#xff0c;我们接着看看吧。 还有其它的电脑重装系统方法 工具/原料&#xff1a; 系统版本&#xff1a;windows7系统 品牌版本&a…