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

RagFlow文档切块提升

1.RagFlow切块介绍

在这里插入图片描述

2.复现优化

2.1 General 通用分块

在这里插入图片描述

def parser_text(self, txt, blockSize=512, overlapSize=0, delimiter="\n!?;。;!?"):'''文本分割'''sentences = self.split_text_by_period_qh(txt, delimiter, blockSize=blockSize)result = []lineNow = ''for line in sentences:if len(line) > blockSize:if lineNow:result.append(lineNow)result.append(line)lineNow = ''elif len(line) + len(lineNow) > blockSize:if lineNow:result.append(lineNow)lineNow = lineelse:lineNow += lineif lineNow:result.append(lineNow)# 处理重叠部分overlapSize_ = int(overlapSize / 2)if overlapSize_ != 0:blockLen = len(result)blocks = []for i in range(len(result)):block = result[i]if i == 0 and blockLen > 1:block = result[i] + result[i + 1][:overlapSize_]elif i == blockLen - 1 and blockLen > 1:block = result[i - 1][-overlapSize_:] + result[i]elif blockLen > 2:block = result[i - 1][-overlapSize_:] + result[i] + result[i + 1][:overlapSize_]blocks.append(block)result = blocksresult = [line.strip('\n \t ') for line in result]return result

升级点:相对于RagFlow,添加了overlapSize块重叠长度入参,可以尽量的保留上下文。

2.2 通用父子分块

在这里插入图片描述

    def ParentChildBlock(self, text, patternParent="\n!?;。;!?", blockSizeParent=myconfig.blockSize, patternChild="\n!?;。;!?",blockSizeChild=int(myconfig.blockSize/5)):# 父子块分割result = []text = self.text_format(text)parentSentences = self.parser_text(text, blockSize=blockSizeParent, overlapSize=0, delimiter=patternParent)for index, sentence in enumerate(parentSentences, start=1):childSentences = self.parser_text(sentence, blockSize=blockSizeChild, overlapSize=0, delimiter=patternChild)dic = {'block_id': index,'content': sentence,'child': []}for child_id, child_content in enumerate(childSentences, start=1):dic['child'].append({'child_id': child_id, 'child_content': child_content})result.append(dic)return result

升级点:RagFlow中没有这种方法。

2.3 QA问答对

(1)excel格式,必须包含两列,question和answer,一个QA一条;
(2)csv格式,必须包含两列,question和answer,一个QA一条;
(3)json格式,必须包含两个key值,question和answer,一个QA一条;

    def excelQA(self, path):excel_file = pd.ExcelFile(path)sheet_names = excel_file.sheet_namesresult = []for sheet_name in sheet_names:pdData = excel_file.parse(sheet_name, dtype=str, header=0)pdData.fillna('', inplace=True)datas = json.loads(pdData.to_json(orient='records'))result.extend(datas)data = self.findQA(result)return datadef findQA(self, jaonData):data1 = []for item in jaonData:try:dic = {}for k, v in item.items():k_ = str(k).lower().replace(' ', '').replace('\t', '').replace('\n', '')dic[k_] = vdata1.append(dic)except:print('QA 文件数据不规范!')result = []for item in data1:q = self.keyQ(item.keys())a = self.keyA(item.keys())if q and a:# result.append([item[q], item[a]])result.append(json.dumps({'问题': str(item[q]).strip(' \n\t'), '答案': str(item[a]).strip(' \n\t')},ensure_ascii=False))return result

2.4 Table表格数据

在这里插入图片描述
升级点:一行一条,加上sheet_name,每一块都是一个json格式的数据,并且进行了长度限制,超出长度则会保存多条。

    def ExcleSplit(self, path):'''一块一行数据'''excel_file = pd.ExcelFile(path)sheet_names = excel_file.sheet_namesresult = []for sheet_name in sheet_names:pdData = excel_file.parse(sheet_name, dtype=str, header=0)pdData.fillna('', inplace=True)pdData['sheet_name'] = sheet_namedata = json.loads(pdData.to_json(orient='records'))result.extend(data)return resultdef ExcleSplitSingle(self, path, blockSize=myconfig.excelSize):'''一块最多一行数据,当一行数据字数超出限制则也需要分成多块'''excel_file = pd.ExcelFile(path)sheet_names = excel_file.sheet_namesresult = []for sheet_name in sheet_names:pdData = excel_file.parse(sheet_name, dtype=str, header=0)pdData.fillna('', inplace=True)pdData['sheet_name'] = sheet_namedatas = json.loads(pdData.to_json(orient='records'))for data in datas:dataStr = json.dumps(data, ensure_ascii=False)chunk_texts = txt_parser.parser_text(dataStr, blockSize=blockSize)result.extend(chunk_texts)return result

2.5 Book

支持的文件格式为DOCX、PDF、TXT。
细分到段落,每个段落一块,并且段落前需要拼接上当前段落所在的所有标题。
对于docx的文档,我们会先读取内部自带的格式,像一级标题/二级标题等,按照这种标题结构对文档进行切块;当不存在上述这种标题结构时,则使用规则的方法进行标题的读取,例如1.1,1.1.1等。

def readDocxStructure(path):'''使用 python-docx 解析工具抽取word文档,存在标题级别的情况下,最多读取5级标题Args:path: 文件路径Returns:titleMarkdown: markdown形式的标题结构all_data: docx 最终的结构数据'''doc = docx.Document(path)all_data = []h1, h2, h3, h4, h5 = '', '', '', '', ''titleMarkdown = ''content = []text_data_list = []docxContentStr = ''lastLevel = -1for para in iter_block_items(doc):if isinstance(para, Paragraph):# p_xlm = para._element.xml  # 读取xml# content = save_picture(doc, p_xlm, content, '')  # 图片处理# 去除连续得到换行符,格式化text = str(para.text)text = re.sub('\n+', '\n', text)text = str(text).strip(' ').replace("\"", "'")docxContentStr += para.text + '\n'if not text or text == '\n':  # 数据无意义continuetext_data_list.append(text)# 判断标题style_name = para.style.name.replace(" ", "")style_id = para.style.style_id.replace(" ", "")if style_name == 'Heading1' or style_name == 'Title' or style_name == '标题1' or style_id == 'Heading1':if content or lastLevel == style_name:# if content and h1:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])h1 = text.replace(' ', '').replace("\"", "'")h2 = ''h3 = ''h4 = ''h5 = ''titleMarkdown += '# %s\n' % h1content = []elif style_name == 'Heading2' or style_name == 'Subtitle' or style_name == '标题2' or style_id == 'Heading2':if content or lastLevel == style_name:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])h2 = text.replace(' ', '').replace("\"", "'")h3 = ''h4 = ''h5 = ''titleMarkdown += '## %s\n' % h2content = []elif style_name == 'Heading3' or style_name == '标题3' or style_id == 'Heading3':if content or lastLevel == style_name:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])h3 = text.replace(' ', '').replace("\"", "'")h4 = ''h5 = ''titleMarkdown += '### %s\n' % h3content = []elif style_name == 'Heading4' or style_name == '标题4' or style_id == 'Heading4':if content or lastLevel == style_name:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])h4 = text.replace(' ', '').replace("\"", "'")h5 = ''titleMarkdown += '#### %s\n' % h4content = []elif style_name == 'Heading5' or style_name == '标题5' or style_id == 'Heading5':if content or lastLevel == style_name:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])h5 = text.replace(' ', '').replace("\"", "'")titleMarkdown += '##### %s\n' % h5content = []else:content.append(text.replace("\"", "'"))lastLevel = style_nameelif isinstance(para, Table):all_cell = []table_str = ''for i, row in enumerate(para.table.rows):cell_lixt = []for index, cell in enumerate(row.cells):if cell not in all_cell:all_cell.append(cell)cell_lixt.append(cell.text.replace('\n', ' '))table_str = table_str + '| %s |' % ' | '.join(cell_lixt) + '\n'if i == 0:table_str = table_str + '| --- ' * len(cell_lixt) + '|\n'if table_str:docxContentStr += table_str + '\n'text_data_list.append(table_str)if content:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])content = []all_data.append([h1, h2, h3, h4, h5, table_str])if content:all_data.append([h1, h2, h3, h4, h5, '\n'.join(content)])return titleMarkdown, all_data, text_data_list, docxContentStr

在这里插入图片描述

2.6 Laws法律条款

在这里插入图片描述
就是一个规则库,匹配最符合的编写逻辑,进行切分。

    def parser_text(self, text, blockSize=myconfig.blockSize):text = self.format_handle(text)# print([text])FormatTypeSelect = self.getFormatType(text, FormatTypes)print(FormatTypeSelect)datas = []row = [''] * (len(FormatTypeSelect) + 1)lastLevel = -1for line in str(text).split('\n'):if not line or line == '\n':continuelevel = self.text2titleLevel(FormatTypeSelect, line)if level == -1:row[-1] += line + '\n'else:if row[-1] or lastLevel == level or level < lastLevel:datas.append(row)row = row[:level] + [line] + [''] * (len(FormatTypeSelect) - level)lastLevel = levelif row[-1]:datas.append(row)chunks = self.chunks2list(datas, blockSize)# print(json.dumps(datas, ensure_ascii=False, indent=4))return chunks

2.7 Regulation规则库分块

将Laws分块进行优化升级,形成Regulation分块方法,可以自动匹配哪一种逻辑,也可以知道某一种逻辑,规则库如下:

[[r"^第[\d零一二三四五六七八九十百]+章",r"^第[\d零一二三四五六七八九十百]+条",],[r"^第[\d零一二三四五六七八九十百]+章",r"^第[\d零一二三四五六七八九十百]+条",r"^[\((][零一二三四五六七八九十百]+[\))]"],[r"^第[零一二三四五六七八九十百0-9]+章",r"^第[零一二三四五六七八九十百0-9]+节",r"^[零一二三四五六七八九十百]+[ 、]",r"^[\((][零一二三四五六七八九十百]+[\))]",],[r"^第[零一二三四五六七八九十百0-9]+(分?编|部分)",r"^第[零一二三四五六七八九十百0-9]+章",r"^第[零一二三四五六七八九十百0-9]+节",r"^第[零一二三四五六七八九十百0-9]+条",r"^[\((][零一二三四五六七八九十百]+[\))]",],[r"^第[\d零一二三四五六七八九十百]+章",r"^\d{1,2}[.、\.]?[^\d.、\.年日月号世天]",r"^\d{1,2}[.、\.]\d{1,2}[.、\.]?[^\d.、\.]",r"^\d{1,2}[.、\.]\d{1,2}[.、\.]\d{1,2}[.、\.]?[^\d.、\.]",r"^\d{1,2}[.、\.]\d{1,2}[.、\.]\d{1,2}[.、\.]\d{1,2}[.、\.]?[^\d.、\.]",r"^\d{1,2}[.、\.]\d{1,2}[.、\.]\d{1,2}[.、\.]\d{1,2}[.、\.]\d{1,2}[.、\.]?[^\d.、\.]",],[r"^PART (ONE|TWO|THREE|FOUR|FIVE|SIX|SEVEN|EIGHT|NINE|TEN)",r"^Chapter (I+V?|VI*|XI|IX|X)",r"^Section [0-9]+",r"^Article [0-9]+"]
]

对于以下文档内容进行分块的效果,文档内容:

福建省监狱计分考核罪犯工作细则\n第二条计分考核罪犯是监狱按照管理和改造要求,以日常计分为基础、等级评定为结果,评价罪犯日常表现的重要工作,是监狱衡量罪犯改造质量的基本尺度,是调动罪犯改造积极性的基本手段。\n第三条监狱计分考核罪犯工作应当坚持党对监狱工作的绝对领导,坚持惩罚与改造相结合、以改造人为宗旨的监狱工作方针,坚持依法严格规范,坚持公平公正公开,坚持监狱人民警察直接考核和集体评议相结合。\n第四条计分考核自罪犯入监之日起实施,日常计分满600分为一个考核周期,等级评定在一个考核周期结束次月进行。\n第五条监狱应当根据计分考核结果给予罪犯表扬、物质奖励或者不予奖励,并将计分考核结果作为对罪犯实施分级处遇、依法提请减刑假释的重要依据。\n第六条监狱成立计分考核工作组(简称“监狱考核组”,下同),由监狱主要负责人任组长,分管狱政管理的监狱领导任副组长,狱政管理、刑罚执行、教育改造、生活卫生、生产管理等部门负责人为成员,负责计分考核罪犯工作的组织领导和重大事项研究。监区、分监区分别成立计分考核工作小组(简称“监区考核组”“分监区考核组”,下同),监区考核组由监区负责人任组长,监区其他领导任副组长,分监区负责人为成员;分监区考核组由分监区负责人任组长,分监区全体民警为成员,负责罪犯日常计分考核工作的具体实施。\n监狱考核组办公室(简称“监狱考核办”,下同)设在狱政管理科,由分管狱政管理的监狱领导任主任,狱政管理、教育改造和生产管理等部门负责人担任副主任,狱政管理、教育改造和生产管理部门各指定1名以上的民警为成员。狱政管理部门负责罪犯监管改造部分加分、扣分、专项加分、专项扣分、月考核分、考核结果运用,以及处罚或者取消考核积分和奖励的审查;教育改造部门负责教育和文化改造部分加分、扣分、等级评定的审查;生产管理部门负责劳动改造部分加分、扣分、表扬兑换物质奖励的审查。\n第七条监狱成立罪犯劳动能力评估(鉴定)小组,由监狱主要负责人任组长,分管狱政管理的监狱领导任副组长,狱政管理、刑罚执行、教育改造、生活卫生、生产管理等部门负责人,以及监狱医院院长、分管医疗副院长为成员,负责对罪犯的劳动能力进行评估(鉴定)。罪犯劳动能力评估(鉴定),由分监区考核组提出评估申请,并填写《罪犯劳动能力评估(鉴定)表》,经监区考核组、监狱医院审核后,报监狱罪犯劳动能力评估(鉴定)小组研究决定。监狱也可以委托社会第三方机构对罪犯劳动能力进行评估(鉴定)。\n第八条监狱计分考核罪犯工作实行考核工作责任制,“谁考核谁负责、谁签字谁负责、谁主管谁负责”,监狱人民警察及相关工作人员在职责范围内对计分考核罪犯工作终身负责。\n省司法厅对计分考核罪犯工作承担指导责任,省监狱管理局承担监督管理责任。\n第九条监狱计分考核罪犯工作应当依法接受纪检监察机关、检察机关、社会团体和人民群众的监督。\n第二章 计分内容和标准\n第十条日常计分是对罪犯日常改造表现的定量评价,由基础分值、日常加扣分和专项加扣分三个部分组成,依据计分的内容和标准,对达到标准的给予基础分,达不到标准或者违反规定的在基础分基础上给予扣分,表现突出的给予加分,符合专项加分情形的给予专项加分,符合专项扣分情形的给予专项扣分,计分总和为罪犯当月考核分。\n第十一条日常计分内容分为监管改造、教育和文化改造、劳动改造三部分,每月基础总分为100分,每月各部分日常加分分值不得超过其基础分的50%,且各部分得分之间不得相互替补。\n第十二条罪犯监管改造表现达到以下标准的,当月给予基础分35分:\n(一)遵守法律法规、监规纪律和行为规范;\n(二)服从监狱人民警察管理,如实汇报改造情况;\n(三)树立正确的服刑意识和身份意识,改造态度端正;\n(四)爱护公共财物和公共卫生,讲究个人卫生和文明礼貌;\n(五)厉行节约,反对浪费,养成节约用水、节约粮食等良好习惯;\n(六)其他遵守监规纪律的情形。\n第十三条罪犯教育和文化改造表现达到以下标准的,当月给予基础分35分:\n(一)服从法院判决,认罪悔罪;\n(二)接受思想政治教育和法治教育,认识犯罪危害;\n(三)接受社会主义核心价值观和中华优秀传统文化教育;\n(四)参加文化、职业技术学习,考核成绩合格;\n(五)接受心理健康教育,配合心理测试;\n(六)参加监狱组织的亲情帮教、警示教育等社会化活动;\n(七)参加文体活动,树立积极改造心态;\n(八)其他积极接受教育和文化改造的情形。\n第十四条罪犯劳动改造表现达到以下标准的,当月给予基础分30分:\n(一)接受劳动教育,掌握劳动技能,自觉树立正确劳动观念;\n(二)服从劳动岗位分配,按时参加劳动;\n(三)认真履行劳动岗位职责,按时完成劳动任务,达到劳动质量要求;\n(四)遵守劳动纪律、操作规程和安全生产规定;\n(五)爱护劳动工具和产品,节约原材料;\n(六)其他积极接受劳动改造的情形。\n第十五条罪犯有下列情形之一,经查证属实,且尚不足认定为立功、重大立功的,应当给予专项加分:\n(一)检举、揭发他人违法犯罪行为或者提供有价值破案线索的,加100分;\n(二)及时报告或者当场制止罪犯实施违法犯罪行为的,加100分;\n(三)检举、揭发、制止罪犯自伤、自残、自杀或者预谋脱逃、行凶等行为的,加100分;\n(四)检举、揭发罪犯私自制作、藏匿、传递、使用违禁品的,加100分;违规品的,加50分;其它不能持有的物品或非监狱配发、购买、批准或允许销售的物品,加20分;\n(五)及时发现和报告重大安全隐患,避免安全事故的,加100分;\n(六)在抗御自然灾害或者处置安全事故中表现积极的,加100分;\n(七)进行技术革新或者传授劳动生产技术成绩突出的,加30分;\n(八)新入监罪犯根据看守所提供的羁押期间表现综合评定为优秀等次的加 50 分,良好等次的加30 分,一般等次的加10 分,差等次的不加分;\n(九)省监狱管理局认定其他具有突出改造行为的,加10-100分,每次加分按10的倍数加分。\n罪犯每年度专项加分总量原则上不得超过300分,有上述第一至五项情形的不受年度加分总量限制。
  • 使用第一种分块方式效果:
    在这里插入图片描述

  • 使用第二种分块方式效果:
    在这里插入图片描述

2.8 One

就是整体文档内容问一个块。

2.9 Resume简历

简历分块,需要使用到LLM,对文档内容进行json格式化,其中需要抽取的字段可以自己定义。

2.10 Picture图片

也是需要使用VL-LLM,对图片内容进行总结。

- Visual Type: [Type]
- Title: [Title text, if available]
- Axes / Legends / Labels: [Details, if available]
- Data Points: [Extracted data]
- Trends / Insights: [Analysis and interpretation]
- Captions / Annotations: [Text and relevance, if available]

2.11 Paper

(1)非扫描件PDF可以直接使用Regulation分块方法对文档进行切块,适当的添加不同的分布规则。
(2)扫描件则需要使用VL大模型对内容进行获取。

3. 总结

最主要的分块方式就是通用分块、父子块分块、表格分块和Regulation分块,对于扫描件则要复杂的多,使用VL对文档内容转换成Markdown形式。

相关文章:

RagFlow文档切块提升

1.RagFlow切块介绍 2.复现优化 2.1 General 通用分块 def parser_text(self, txt, blockSize512, overlapSize0, delimiter"\n!?;。&#xff1b;&#xff01;&#xff1f;"):文本分割sentences self.split_text_by_period_qh(txt, delimiter, blockSizeblockSize)…...

音频转base64

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>音频转Base64</title><style>.containe…...

蓝桥杯 11. 打印大X

打印大X 原题目链接 题目描述 小明希望用星号拼凑&#xff0c;打印出一个大 X&#xff0c;他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格&#xff0c;所有的空白位置都以句点符 . 来代替。 输入描述 输入两个整数 m 和 n&#xff0c;表示笔画的宽度和 X 的高…...

页面需要重加载才能显示的问题修改

1.问题描述&#xff1a;跳转页面后&#xff0c;只有点击重新加载后才会显示内容 经过测试后&#xff1a; / 跳转详情 const goToDetail (bookId) > { router.push({ path: /classic-detail, query: { book_id: bookId } }) } 执行完以上代码后&#xff0c;页面从classics…...

On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其二——数学计算部分

这篇内容的源博文是 On the Biology of a Large Language Model 这是Anthropic&#xff0c;也就是Claude的团队的一遍技术博客。他的主要内容是用一种改良版的稀疏编码器来解释LLM在inference过程中内部语义特征的激活模式。因为原文太长&#xff0c;我把原文分成了几份来写阅读…...

Python语言基础知识详解:标识符与变量

Python语言基础知识详解&#xff1a;标识符与变量 一、标识符&#xff08;Identifiers&#xff09; 定义 标识符是用于命名变量、函数、类、模块或其他对象的名称。它是代码中对实体的唯一标识。 1. 标识符的命名规则 Python的标识符需遵循以下规则&#xff1a; 允许的字符 由…...

google chrome 中 fcitx5 候选框不跟随光标

我的电脑&#xff1a;ubuntu22.04&#xff0c;窗口系统&#xff1a;wayland 2025/4/26 号更新的谷歌浏览器 今天打开浏览器发现输入法的候选框固定在左上角不动了&#xff0c;一番折腾&#xff0c;发现解决办法如下&#xff1a; 在搜索框中输入 about:flags搜索 wayland&#…...

深入浅出提示词工程(结合 DeepSeek)

提示词工程 Prompt 即提示、指令&#xff0c;所以提示工程也叫「指令工程」 用户输入的问题称为 Prompt&#xff0c;本文主要探讨 System Prompt&#xff08;我将其翻译成「系统预设」&#xff09; 使用 Prompt 的目的 直接提问 如「我该学 Vue 还是 React&#xff1f;」&…...

OpenVLA:大语言模型用于机器人操控的经典开源作品

TL;DR 2024 年斯坦福大学提出的 OpenVLA&#xff0c;基于大语言模型实现机器人操控&#xff0c;代码完全开源。 Paper Notes Name&#xff1a;OpenVLA: An Open-Source Vision-Language-Action ModelURL&#xff1a;https://openvla.github.io/作者&#xff1a;斯坦福&#…...

数值分析、数值代数之追赶法

数值分析、数值代数之追赶法 MATLAB 中&#xff0c;diag 函数用法追赶法推导过程代码运行过程 MATLAB 中&#xff0c;diag 函数用法 在 MATLAB 中&#xff0c;diag 函数用于处理矩阵的对角线元素或创建对角矩阵。以下是其常见的用法&#xff1a; 1.提取矩阵的对角线元素 2.创…...

深入浅出JVM - Java架构师面试实战

深入浅出JVM - Java架构师面试实战 本文通过模拟一位拥有十年Java研发经验的资深架构师马架构与面试官之间的对话&#xff0c;深入探讨了JVM的核心知识点。涵盖内存结构、垃圾回收算法、垃圾回收器、内存调优工具及参数配置等关键领域。 第一轮提问 面试官&#xff1a; 马架…...

Qt网络数据解析方法总结

在Qt中解析网络数据通常涉及接收原始字节流&#xff0c;并将其转换为有意义的应用层数据。以下是详细步骤和示例&#xff1a; 1. 网络数据接收 使用QTcpSocket或QUdpSocket接收数据&#xff0c;通过readyRead()信号触发读取&#xff1a; // 创建TCP Socket并连接信号 QTcpSo…...

[AHOI2001] 质数和分解

import java.util.*;public class Main {static int[] ss new int[201];public static void main(String[] args) {Scanner sc new Scanner(System.in);while (sc.hasNextInt()) { int n sc.nextInt();int num 0; // 记录质数个数int[] dp new int[201];dp[0] 1;for (in…...

说一下Drop与delete区别

在数据库操作里&#xff0c;DROP与DELETE是两个重要且功能不同的命令&#xff0c;以下为你详细介绍二者的区别&#xff1a; 功能层面 DROP&#xff1a;此命令用于删除数据库、表、视图、索引等数据库对象。一旦执行&#xff0c;数据库对象就会被彻底删除&#xff0c;其定义和…...

基于云原生架构的后端微服务治理实战指南

一、引言&#xff1a;为什么在云原生时代更需要微服务治理&#xff1f; 在单体应用时代&#xff0c;开发和部署虽然简单&#xff0c;但随着系统规模的扩大&#xff0c;单体架构的维护成本急剧上升&#xff0c;部署频率受限&#xff0c;模块之间相互影响&#xff0c;最终导致系…...

后端响应巨量数据,如何优化性能?

WebSocket流式传输 fetch虚拟滚动 &#xff08;渲染性能提升&#xff0c;一次性记载固定条数&#xff09;分片滚动 fetch流式传输 async function streamData(url) {unction streamOutput(msg) {// 发送 POST 请求fetch(url, {method:"POST",body:JSON.stringify({ …...

《代码整洁之道》第4章 注释 - 笔记

注释的恰当用法是弥补代码表达意图时遭遇的失败&#xff0c;良好的代码&#xff0c;让读者看代码就能明白含义。 代码在变动&#xff0c;在演化。注释并不总是随之变动。不准确的注释比没有注释要坏的多。注释算的上是一种没办法去除的恶。 注释不能美化代码 与其花时间编写…...

闭包与装饰器(python)

此 Python 代码借助闭包构建了计算对数的函数。闭包指的是一个函数与其所引用的外部变量共同构成的一个整体。借助闭包&#xff0c;我们能够创建具有特定行为的函数&#xff0c;并且这些函数可以记住其创建时的环境。 代码详细分析 导入模块 python import math 导入 math …...

学成在线网页

技术&#xff1a;h5css&#xff0c;静态页面 主页&#xff1a; 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…...

AI测试工具Testim——告别自动化测试维护难题

随着人工智能技术的快速发展&#xff0c;AI测试工具正在成为提升软件研发效能的关键。每款AI的特性各有差异&#xff0c;今天&#xff0c;我们就给大家介绍一款专注于Web和移动应用的端到端的AI测试工具--Testim。 Testim的简介 官网地址&#xff1a;https://www.testim.io/ 简…...

【C++详解】C++入门(二)引用、内联函数、nullptr宏

文章目录 一、引用引用的概念和定义引用的功能引用的特性const引用const用法回顾权限的放大缩小const引用的功能 指针和引用的关系 二、内联函数三、nullptr补充结构体指针变量类型重定义 一、引用 引用的概念和定义 C祖师爷为了优化在部分场景中使用指针会出现的效率较低和比…...

8、HTTPD服务--CGI机制

目录 1、测试PHP页面 2、安装php软件 一、CGI机制介绍 1、测试PHP页面 [rootlocalhost ~]# cat /mp3/test1.php AAAAAAAAAAAAA <?phpphpinfo(); ?> 2、安装php软件 # yum install -y php # systemctl restart httpd php实际上是作为httpd的功能模块存在的 [r…...

层级时间轮的 Golang 实现原理与实践

一、引言 在高并发服务中&#xff0c;延时任务的管理是一个常见且重要的需求。比如 HTTP 请求超时、心跳检测、订单超时未支付提醒等场景&#xff0c;传统的 Timer 或 Heap 实现会带来 O(log n) 的复杂度&#xff0c;难以支撑百万级别的定时任务。 论文《Hashed and Hierarch…...

人类社会的第四阶段

本书的主旨是探讨一场新的权力革命&#xff0c;它将以20世纪民族国家的毁灭为代价&#xff0c; 解放出个体。创新&#xff0c;以前所未有的方式改变了暴力的逻辑&#xff0c;并且正在革新未来的 边界。如果我们的推论是正确的&#xff0c;你们正站在一场有史以来最宏大的革命的…...

Golang | Builder模式

Builder模式是一种创建型设计模式&#xff0c;用于分步骤构建复杂对象&#xff0c;尤其适用于构造过程复杂或需要多个配置选项的场景。将对象的构造过程与其表示分离&#xff0c;通过分步骤和链式调用的方式灵活创建对象&#xff0c;避免构造函数的参数爆炸&#xff0c;提升代码…...

C#本地使用离线ocr库识别图片中文本,工具包PaddleOCRSharp

C#本地使用离线ocr库识别图片文本&#xff0c;工具包PaddleOCRSharp PaddleOCRSharp介绍 项目地址&#xff1a;https://github.com/raoyutian/PaddleOCRSharp PaddleOCRSharp 是一个.NET版本OCR可离线使用类库。项目核心组件PaddleOCR.dll目前已经支持C\C、.NET、Python、Go…...

Flutter 在 Dart 3.8 开始支持 Null-Aware Elements 语法,自动识别集合里的空元素

近日&#xff0c;在 Dart 3.8 的 changelog 里正式提交了 Null-Aware Elements 语法&#xff0c;该语法糖可以用于在 List、Set、Map 等集合中处理可能为 null 的元素或键值对&#xff0c;简化显式检查 null 的场景&#xff1a; /之前 var listWithoutNullAwareElements [if …...

3、Linux操作系统下,linux的技术手册使用(man)

linux系统内置技术手册&#xff0c;方便开发人员查阅Linux相关指令&#xff0c;提升开发效率 man即是manual的前三个字母&#xff0c;有时候遇事不决&#xff0c;问个人&#xff08;man&#xff09; 其在线网址为&#xff1a;man 还有man网站的作者写的书&#xff0c;可以下…...

Python 自动化办公:Excel 数据处理的“秘密武器”

引言 在日常的 IT 办公场景里&#xff0c;Excel 是数据处理与分析的 “常胜将军”。无论是财务人员整理账目、销售团队统计业绩&#xff0c;还是运营人员分析用户数据&#xff0c;Excel 都发挥着关键作用。但面对海量数据&#xff0c;手动操作 Excel 不仅效率低下&#xff0c;还…...

通过数据增强打造抗噪音多模态大模型

下载前面 想象一下,你正在一个嘈杂的咖啡馆里,想让身边的AI助手帮你预定一张电影票。或者,你在熙熙攘攘的街道上,需要语音导航带你找到目的地。在这些真实的场景中,语音交互面临着一个巨大的挑战——噪音。 背景噪音、他人说话声、设备本身的电流声……这些无处不在的干…...

Node.js API 安全的主要策略:最佳实践

了解 Node.js API 安全性 保护 Node.js API 的安全需要了解潜在的漏洞并采取措施来缓解这些漏洞。这类 API 通常遇到的常见威胁包括: SQL 注入**:**操纵用户输入以针对数据库执行恶意 SQL 代码。跨站点脚本**(XSS):**将恶意脚本注入其他用户查看的网页。跨站请求伪造**(CSR…...

如何删除Google Chrome中的所有历史记录【一键清除】

谷歌浏览器记录了用户访问过的网站。这方便了查找&#xff0c;但有时也需要清理。删除所有历史记录很简单&#xff0c;只要按照以下步骤操作。 1. 打开谷歌浏览器 首先要启动谷歌浏览器。点击右上角的三个点&#xff0c;进入主菜单。 2. 进入历史记录界面 在菜单中找到“历史…...

计算机三大主流操作系统的前世今生 - Linux|macOS|Windows

全文目录 1 引言2 起源之路2.1 Linux 起源2.2 macOS 起源2.3 Windows 起源 3 综合解析3.1 Linux系统综合解析3.1.1 系统定义与核心架构3.1.2 发展历程3.1.3 核心特点3.1.4 主流发行版3.1.5 应用场景 3.2 macOS系统综合解析3.2.1 系统定义与核心架构3.2.2 发展历程3.2.3 核心特点…...

大数据学习栈记——Hive4.0.1安装

本文介绍大数据技术中数据仓库Hive的安装配置&#xff0c;版本&#xff1a;Hive4.0.1&#xff0c;Ubuntu24.04。 Hive简介 Hive由 Facebook 开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据…...

8.Excel:数据验证和下拉列表

一 数据验证 1.作用 限制用户输入单元格的值。 补充&#xff1a;数据验证要先设置验证才会起作用&#xff0c;对于已经填写完成的表格来说&#xff0c;可以快速找到不符合的数值。 选中整列&#xff0c;然后设置数据验证。 然后圈释无效数据&#xff0c;不符合的会被圈出来 2.如…...

【机器学习-线性回归-4】线性回归中的最优解:从数学原理到实践应用

在机器学习的世界里&#xff0c;线性回归就像是一把瑞士军刀——简单却功能强大。无论是预测房价、分析销售趋势&#xff0c;还是研究变量间的相关性&#xff0c;线性回归都是数据科学家首选的入门算法。但你是否曾好奇过&#xff0c;这个看似简单的算法背后&#xff0c;是如何…...

《代码整洁之道》全书归纳

如果要把这本书最关键、最核心、被反复提及和强调的重点提炼出来&#xff0c;那就是&#xff1a; 可读性高于一切&#xff1a; 你的代码是给人读的&#xff0c;让它像一篇清晰的文章一样易于理解。表达意图是关键。短小、单一&#xff1a; 函数要短小&#xff0c;类要短小&…...

项目代码生成工具

代码生成工具 文章目录 代码生成工具提取公共类domainbodtoentityvoBean基类 代码生成工厂连接配置模版1、基础类基类Entity添加DTO类分页查询DTO基础查询DTO修改DTO视图VO 2、controller2、service接口3、service实现类4、Mapper接口5、Mapper的xml文件 提取公共类 比方说每个…...

【机器学习驱动的智能化电池管理技术与应用】

在人工智能与电池管理技术融合的背景下&#xff0c;电池科技的研究和应用正迅速发展&#xff0c;创新解决方案层出不穷。从电池性能的精确评估到复杂电池系统的智能监控&#xff0c;从数据驱动的故障诊断到电池寿命的预测优化&#xff0c;人工智能技术正以其强大的数据处理能力…...

【MySQL 】MySQL 安装自记录全程-详细 (mysql-installer-community-8.0.42.0.msi)

看了一些别人的文章&#xff0c;其实还有些困惑&#xff0c;根据不少都有一些跟我遇到的不太一样&#xff0c;记录一下自己的安装过程 MySQL 安装&#xff08;Windows&#xff09; 下载 MySQL 安装包 MySQL数据库官网链接 MySQL &#xff08;MySQL的https://www.mysql.com/ …...

构建事件驱动的云原生后端系统 —— 从设计到实践

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为什么需要事件驱动架构? 在现代互联网应用中,系统规模越来越大,功能模块越来越复杂,用户行为越来越不可预测。 传统的同步调用、强耦合的后端架构,面对大规模并发、高频变化、复杂交…...

时间复杂度和空间复杂度 [数据结构 初阶]

目录 算法效率 1. 时间复杂度 1.1 时间复杂度概念 1.2 大O 的渐进表示法 1.2.1 计算 func1 的基本操作执行了多少次 1.3 推导 大O 阶方法 2. 空间复杂度 算法效率 // 算法效率分析分为两种: 1) 时间效率: 时间复杂度, 用来衡量一个算法的运行速度; 2) 空间效率: 空间复…...

SpringMVC 通过ajax 前后端数据交互

在前端的开发过程中&#xff0c;经常在html页面通过ajax进行前后端数据的交互&#xff0c;SpringMVC的controller进行数据的接收&#xff0c;但是有的时候后端会出现数据无法接收到的情况&#xff0c;这个是因为我们的参数和前端ajax的contentType参数 类型不对应的情景&#x…...

Qt从零开始(1)了解

文章目录 1. Qt技术介绍2. 开发GUI的选择3. 框架的介绍4.Qt发展历程&#xff08;简单介绍&#xff09;5. Qt支持的系统6. Qt开发方式7.Qt优点总结 简介&#xff1a;这篇文章简单介绍下Qt的相关知识与应用场景&#xff0c;随便看看&#xff0c;了解了解即可。如果介绍有误或者描…...

当元数据遇见 AI 运维:智能诊断企业数据资产健康度

在数字化浪潮席卷全球的当下&#xff0c;企业数据资产规模呈指数级增长&#xff0c;然而传统数据监控方式却逐渐暴露出诸多弊端。想象一下&#xff0c;在某头部电商的晨会上&#xff0c;数据工程师小王正经历职业生涯最尴尬的时刻&#xff1a;“昨天促销活动的 UV 数据为什么比…...

关于OCP认证:有Oracle和MySQL两种

认证针对的数据库系统 MySQL OCP&#xff1a;是 Oracle 公司针对 MySQL 数据库管理员和开发者设计的认证&#xff0c;主要验证持证者在 MySQL 数据库管理、优化及安全等方面的技术能力。MySQL 是开源的关系数据库管理系统&#xff0c;以其简单、高性能和灵活性在中小型企业及开…...

Macos m系列芯片环境下python3安装mysqlclient系列问题

最近学习python3&#xff0c;在安装mysqlclient的时候遇到了一些问题&#xff0c;直接使用哦pip install mysqlclient 直接报错了&#xff0c;记录一下解决方案。 环境信息 设备&#xff1a;Macbook Pro m1 系统&#xff1a;macos Sequoia 15.3.2 最终成功的python版本&#xf…...

《代码整洁之道》第7章 错误处理 - 笔记

得墨忒耳定律 不要链式调用&#xff0c; 如 a.getB().getC().doSomething()。 直接获取对象调用方法 数据传输对象&#xff08;DTOs&#xff09; DTO (Data Transfer Object)&#xff1a; 数据传输对象。这是一种典型的数据结构。 里面没有任何业务逻辑代码。它的唯一作用就…...

java-mybatis01

对象/关系映射ORM ORM完成面向对象的编程语言DAO关系数据库的映射后&#xff0c;开发人员可以利用面向对象设计语言的建议易用性&#xff0c;也可利用关系数据库的技术优势。 ORM把关系数据库包装成面向对象的模型&#xff0c;采用ORM框架后&#xff0c;应用程序不再直接访问底…...

单片机之间的双向通信

具体功能实现 甲单片机通过按键可以控制乙单片机的LED灯&#xff0c;而乙单片机通过可以让连接甲单片机的数码管数字自增加一。 定时器资源 3个定时器 中断系统 执行现程序的过程中&#xff0c;出现某些急需处理的异常情况或特殊请求&#xff0c;cpu暂时中止现行程序&…...