文档内容提取以及合成
如何从10个左右的docx文档中抽取内容,生成新的文档,抽取内容包括源文档的文字内容、图片、表格、公式等,以及目标文档的样式排版、字体、格式,还有目标文档的语言风格、用词规范、文法习惯等等。这是一个相当复杂的需求,因为它不仅涉及内容提取,还涉及深度格式化和风格模仿。完全自动化的完美解决方案难度极高,特别是对于复杂的公式和微妙的语言风格。
一个务实的方案是采用 自动化 + 人工辅助 的混合策略。以下是详细的思路、技术路径、方法和步骤:
核心思路
- 内容提取 (自动化为主): 使用编程方式从源 DOCX 文件中提取所需的核心内容(文字、图片、表格、公式的某种表示)。
- 样式应用 (自动化): 基于一个定义了目标样式、排版、字体等的 模板文档,将提取的内容插入新文档,并应用模板中定义的样式。
- 语言风格调整 (自动化辅助 + 人工): 利用大型语言模型 (LLM) 或自然语言处理 (NLP) 技术对提取的文本进行初步的风格、用词和文法调整,然后进行人工审阅和精修。
- 复杂元素处理 (人工为主): 对于难以自动处理的元素(如复杂公式、特定排版),进行人工调整。
技术路径
- 主要工具: Python 编程语言
- 核心库:
python-docx
: 用于读取和写入 DOCX 文件(文本、表格、图片、基本样式应用)。- (可选) 用于公式处理: 可能需要解析 DOCX 的底层 XML (OOXML),或者寻找专门处理 MathML/OMML 的库(这部分比较困难),或者将公式提取为图片。
- (可选) 用于图片处理:
Pillow
(PIL Fork) 可能需要用于处理图片。 - (可选) 用于语言风格调整: 调用大型语言模型 API (如 OpenAI GPT 系列、Google Gemini、或其他类似服务)。
- 辅助工具:
- Microsoft Word: 用于创建模板文档、最终审阅和调整。
- XML 编辑器 (可选): 用于深入分析 DOCX 内部结构(特别是公式)。
实现步骤
阶段一:准备工作
-
创建目标模板文档 (
template.docx
):- 在 Word 中创建一个新文档。
- 定义样式: 精心设置所有需要的样式(标题 1、标题 2、正文、引用、列表、表格样式等),包括字体、字号、颜色、段落间距、缩进等。确保样式名称清晰易懂(例如
TargetHeading1
,TargetBodyText
,TargetTableStyle
)。 - 设置页面布局: 页边距、纸张大小、页眉页脚等。
- 保存: 将此文档保存为
template.docx
。这将是所有新生成文档的基础。
-
明确提取规则:
- 关键: 你需要非常清楚地定义 哪些 内容需要从每个源文档中提取出来。规则可以基于:
- 特定标题: “提取 ‘第三章 方法’ 下的所有内容”。
- 特定样式: “提取所有应用了 ‘源文档重点’ 样式的内容”。
- 关键词/标记: “提取包含 ‘[EXTRACT]’ 标记的段落”。
- 结构位置: “提取每个文档的第二个表格”。
- 人工指定: (最灵活但最慢) 手动在源文档中标记要提取的内容(例如使用 Word 的批注功能或特定高亮颜色),然后让脚本识别这些标记。
- 文档化规则: 将这些规则清晰地记录下来,以便编写脚本。
- 关键: 你需要非常清楚地定义 哪些 内容需要从每个源文档中提取出来。规则可以基于:
-
设置开发环境:
- 安装 Python。
- 使用 pip 安装必要的库:
pip install python-docx Pillow requests # 如果需要调用 LLM API # 可能需要其他库,取决于具体实现
- (可选) 获取 LLM API 密钥。
阶段二:内容提取 (Python 脚本)
import os
from docx import Document
from docx.shared import Inches
# 可能需要导入其他模块,如处理 XML 或调用 API# --- 配置 ---
SOURCE_DOCS_DIR = 'files/transform/docx/source_documents'
TARGET_TEMPLATE = 'files/transform/docx/template.docx'
OUTPUT_DOC_PATH = 'files/transform/docx/generated_document.docx'
EXTRACTION_RULES = { # 示例规则,需要根据你的实际情况修改'source_doc_1.docx': {'heading_start': 'Chapter 3', 'heading_end': 'Chapter 4'},'source_doc_2.docx': {'style_name': 'SourceHighlight'},# ... 其他文档的规则
}# --- 辅助函数 (示例) ---
def should_extract_paragraph(paragraph, rules):# 实现基于规则判断段落是否应该提取的逻辑# 例如:检查段落文本是否匹配、样式是否匹配等# 返回 True 或 False# (这部分逻辑需要根据你的具体规则编写)style_name = paragraph.style.nametext = paragraph.text.strip()# 示例:基于样式的简单规则if 'style_name' in rules and style_name == rules['style_name']:return True# 示例:基于起始标题的简单规则(需要状态管理)# if 'heading_start' in rules ... (需要更复杂的逻辑来跟踪当前章节)return False # 默认不提取def extract_content_from_doc(source_path, rules):"""从单个源文档提取内容"""extracted_elements = []try:source_doc = Document(source_path)# 标记是否处于提取区域(例如,在特定章节之间)in_extraction_zone = False # 需要根据规则调整初始状态for element in source_doc.element.body:# 处理不同类型的元素:段落、表格等if element.tag.endswith('p'): # 是段落paragraph = docx.text.paragraph.Paragraph(element, source_doc)# --- 核心提取逻辑 ---# 这里需要根据你的 EXTRACTION_RULES 实现复杂的判断逻辑# 例如,判断是否遇到起始标题,是否遇到结束标题,段落样式是否匹配等# 这是一个简化的示例,实际可能需要更精细的状态管理if 'heading_start' in rules and paragraph.style.name.startswith('Heading') and rules['heading_start'] in paragraph.text:in_extraction_zone = Truecontinue # 不提取起始标题本身?看需求if 'heading_end' in rules and paragraph.style.name.startswith('Heading') and rules['heading_end'] in paragraph.text:in_extraction_zone = Falsecontinue # 到达结束标题,停止提取if in_extraction_zone or should_extract_paragraph(paragraph, rules):# 提取文本内容text_content = paragraph.text# 尝试提取基本格式(粗体、斜体) - 比较复杂,可能需要遍历 runs# TODO: 提取图片 (需要检查段落中的 inline_shapes 或 runs 中的 drawing)# TODO: 提取公式 (极具挑战性,见下文讨论)extracted_elements.append({'type': 'paragraph', 'text': text_content, 'style': paragraph.style.name}) # 可以携带源样式名供参考elif element.tag.endswith('tbl'): # 是表格table = docx.table.Table(element, source_doc)# --- 提取表格 ---# TODO: 实现表格提取逻辑,可能需要检查是否在提取区域内# if in_extraction_zone or table_should_be_extracted(table, rules):table_data = []for row in table.rows:row_data = [cell.text for cell in row.cells]table_data.append(row_data)extracted_elements.append({'type': 'table', 'data': table_data})# --- 处理图片 ---# 查找段落内的图片 (inline_shapes)# paragraph = docx.text.paragraph.Paragraph(element, source_doc) # Re-get paragraph object if needed# for run in paragraph.runs:# if run.element.xpath('.//wp:inline | .//wp:anchor'): # Check for drawings# # This part is complex: need to get image data (rId) and relate it back# # to the actual image part in the docx package.# # python-docx can extract images, but associating them perfectly# # with their original position during extraction requires care.# # Placeholder:# # image_data = get_image_data(run, source_doc)# # if image_data:# # extracted_elements.append({'type': 'image', 'data': image_data, 'filename': f'img_{len(extracted_elements)}.png'})pass # Placeholder for image extraction logicexcept Exception as e:print(f"Error processing {source_path}: {e}")return extracted_elements# --- 主流程 ---
all_extracted_content = []
source_files = [f for f in os.listdir(SOURCE_DOCS_DIR) if f.endswith('.docx')]for filename in source_files:source_path = os.path.join(SOURCE_DOCS_DIR, filename)rules = EXTRACTION_RULES.get(filename, {}) # 获取该文件的提取规则if rules: # 只处理定义了规则的文件print(f"Extracting from: {filename}")content = extract_content_from_doc(source_path, rules)all_extracted_content.extend(content)else:print(f"Skipping {filename}, no rules defined.")print(f"Total elements extracted: {len(all_extracted_content)}")
阶段三:语言风格调整 (可选, Python + LLM API)
# --- ---
import requests
import json# --- 配置 LLM ---
LLM_API_URL = "YOUR_LLM_API_ENDPOINT" # e.g., OpenAI API URL
LLM_API_KEY = "YOUR_LLM_API_KEY"
LLM_PROMPT_TEMPLATE = """
请根据以下要求,改写这段文字:
目标语言风格:[在此处详细描述,例如:正式、客观、简洁]
用词规范:[在此处列出规范,例如:使用“用户”而非“客户”,避免使用缩写]
文法习惯:[在此处描述,例如:多使用主动语态,句子长度适中]
目标受众:[描述目标读者]原文:
"{text}"改写后的文字:
"""def adapt_text_style(text):"""使用 LLM API 调整文本风格"""if not text.strip():return text # 跳过空文本prompt = LLM_PROMPT_TEMPLATE.format(text=text)headers = {"Authorization": f"Bearer {LLM_API_KEY}","Content-Type": "application/json",}data = {"model": "gpt-4", # 或你使用的模型"prompt": prompt,"max_tokens": 1024, # 根据需要调整"temperature": 0.5, # 控制创造性,较低值更保守}try:response = requests.post(LLM_API_URL, headers=headers, json=data)response.raise_for_status() # 检查 HTTP 错误result = response.json()# 解析 LLM 返回的结果,注意不同 API 的格式可能不同rewritten_text = result['choices'][0]['text'].strip() # 示例路径print(f"Original: {text[:50]}... | Rewritten: {rewritten_text[:50]}...")return rewritten_textexcept requests.exceptions.RequestException as e:print(f"Error calling LLM API: {e}")return text # 出错时返回原文except (KeyError, IndexError) as e:print(f"Error parsing LLM response: {e} - Response: {response.text}")return text # 出错时返回原文# --- 应用风格调整 ---
adjusted_content = []
for element in all_extracted_content:if element['type'] == 'paragraph':# --- 调用 LLM API ---# adjusted_text = adapt_text_style(element['text'])# element['text'] = adjusted_text # 更新文本# --- 或者先不调用,等生成后再处理 ---adjusted_content.append(element)elif element['type'] == 'table':# 表格内容也可以逐个单元格处理,但可能效果不佳或成本高# 更好的方法可能是将表格内容整理成文本描述给 LLM,或者人工处理adjusted_content.append(element)elif element['type'] == 'image':# 图片无法直接处理adjusted_content.append(element)# 处理其他类型...# --- (接续到下一阶段:文档生成) ---
阶段四:生成目标文档 (Python 脚本)
# --- (续上) ---# --- 创建目标文档 (基于模板) ---
try:target_doc = Document(TARGET_TEMPLATE)
except Exception as e:print(f"Error loading template {TARGET_TEMPLATE}: {e}")# 可以考虑创建一个空文档作为后备# target_doc = Document()exit()# --- 填充内容并应用样式 ---
for element in adjusted_content: # 使用调整后的内容,或者原始提取内容if element['type'] == 'paragraph':text = element['text']# --- 核心:应用模板中定义的样式 ---# 简单方式:所有段落应用默认正文样式# target_doc.add_paragraph(text, style='TargetBodyText') # 假设模板中有此样式# 复杂方式:根据源文档信息或内容判断应用哪个目标样式# 示例:如果源样式是 Heading 1,应用 TargetHeading1source_style = element.get('style', '') # 获取源样式名(如果提取时保存了)if source_style.startswith('Heading 1'):target_doc.add_paragraph(text, style='TargetHeading1') # 假设模板中有此样式elif source_style.startswith('Heading 2'):target_doc.add_paragraph(text, style='TargetHeading2')# ... 其他样式映射规则else:target_doc.add_paragraph(text, style='TargetBodyText') # 默认样式elif element['type'] == 'table':table_data = element['data']if table_data:# 创建表格num_rows = len(table_data)num_cols = len(table_data[0]) if num_rows > 0 else 0if num_rows > 0 and num_cols > 0:# --- 应用模板中定义的表格样式 ---table = target_doc.add_table(rows=num_rows, cols=num_cols, style='TargetTableStyle') # 假设模板中有此表格样式# 填充数据for i, row_data in enumerate(table_data):for j, cell_text in enumerate(row_data):# 防止列数不匹配错误if j < len(table.rows[i].cells):table.rows[i].cells[j].text = cell_text# 可以添加更多表格格式化代码,如设置列宽等elif element['type'] == 'image':# --- 添加图片 ---# image_data = element['data']# image_filename = element['filename']# # 需要将 image_data 保存为临时文件或使用 BytesIO# from io import BytesIO# image_stream = BytesIO(image_data)# try:# target_doc.add_picture(image_stream, width=Inches(4.0)) # 调整宽度# except Exception as e:# print(f"Error adding image {image_filename}: {e}")pass # Placeholder for image insertion# --- 处理公式 (挑战) ---# 如果公式被提取为图片:# elif element['type'] == 'formula_image':# # 添加图片...# 如果公式被提取为 MathML/OMML (XML 字符串):# elif element['type'] == 'formula_mathml':# # 使用 python-docx 直接插入 MathML 很困难# # 可能需要直接操作 OOXML (非常复杂)# # 或者,在段落中插入一个占位符 "[FORMULA]",然后手动替换# target_doc.add_paragraph(f"[FORMULA: {element['id']}]", style='TargetBodyText')# 如果公式被提取为纯文本近似值:# elif element['type'] == 'formula_text':# target_doc.add_paragraph(element['text'], style='FormulaStyle') # 可能需要特殊样式# --- 保存最终文档 ---
try:target_doc.save(OUTPUT_DOC_PATH)print(f"Document successfully generated: {OUTPUT_DOC_PATH}")
except Exception as e:print(f"Error saving document: {e}")
阶段五:人工审阅与精修
- 打开生成的文档 (
generated_document.docx
)。 - 检查整体结构和内容完整性: 是否所有需要的内容都被提取并放置在正确的位置?
- 检查样式和格式:
- 所有文本是否应用了正确的模板样式?
- 字体、字号、间距是否符合要求?
- 表格样式是否正确?列宽、对齐是否需要调整?
- 图片位置和大小是否合适?
- 检查语言风格和规范:
- 通读文本,检查语气、用词是否符合目标要求。
- 修正 LLM 可能产生的错误或不自然的表达。
- 确保术语统一。
- 进行拼写和语法检查。
- 处理复杂元素:
- 公式: 这是最可能需要手动操作的地方。如果脚本插入了占位符,你需要手动将源文档中的公式复制粘贴过来,或者使用 Word 的公式编辑器重新创建它们。确保公式的编号和引用正确。
- 特殊排版: 检查是否有需要特殊布局(如图文混排、分栏等)的地方,并手动调整。
- 最终定稿: 保存修改后的文档。
关于公式处理的挑战与策略
- 难点: DOCX 中的公式通常使用 OMML (Office Math Markup Language) 存储,嵌套在复杂的 XML 结构中。
python-docx
对此支持有限。 - 策略:
- 提取为图片 (最可行): 尝试在提取阶段将公式渲染或截图为图片。这会丢失编辑能力,但能保证视觉效果。实现起来也有难度,可能需要借助其他工具或库(如
docx2python
库可能提供一些帮助,或者需要分析 OOXML 找到图片表示)。 - 提取为 MathML/OMML (复杂): 解析 OOXML,提取公式的 XML 片段。但
python-docx
无法直接将这些 XML 重新插入并渲染为公式。需要非常底层的 OOXML 操作。 - 提取为近似文本 (简单但损失精度):
python-docx
读取包含公式的段落text
属性时,有时会得到一个纯文本的近似表示。这对于简单公式可能够用,但复杂公式会完全失真。 - 手动处理 (最可靠): 在脚本中识别出公式位置,插入占位符,然后在人工审阅阶段手动复制/创建公式。
- 提取为图片 (最可行): 尝试在提取阶段将公式渲染或截图为图片。这会丢失编辑能力,但能保证视觉效果。实现起来也有难度,可能需要借助其他工具或库(如
总结
这是一个多阶段、结合自动化和人工的过程。
- 自动化强项: 重复性的内容提取、基于模板的样式应用、初步的文本风格转换(使用 LLM)。
- 人工介入点: 定义精确的提取规则、处理复杂公式、精调语言风格和术语、最终的格式微调和质量检查。
投入时间最多的部分将是 编写和调试提取逻辑 以及 最终的人工审阅和修正。务必从少量文档和简单规则开始,逐步迭代和完善你的脚本。
相关文章:
文档内容提取以及合成
如何从10个左右的docx文档中抽取内容,生成新的文档,抽取内容包括源文档的文字内容、图片、表格、公式等,以及目标文档的样式排版、字体、格式,还有目标文档的语言风格、用词规范、文法习惯等等。这是一个相当复杂的需求࿰…...
[Windows] Wireshark 网络抓包工具 v4.4.6
[Windows] Wireshark 网络抓包工具 链接:https://pan.xunlei.com/s/VOODTZ7Lm2gsNLoFNcOIqflzA1?pwdf3ea# 软件说明Wireshark(前称Ethereal)是一款免费开源的网络嗅探抓包东西,世界上最流行的网络协议剖析器!网络封…...
在Ubuntu中安装hadoop的详细过程
在Ubuntu中安装hadoop的详细过程 请自行安装Ubuntu系统(可参考:在VMWare中安装Linux虚拟机Ubuntu) 一、创建hadoop用户 如果在安装 Ubuntu 的时候不是用的 “hadoop” 用户,这时需要增加一个名为 hadoop 的用户。 首先打开终端…...
NOIP2017提高组.列队
目录 *数据结构模板题目算法标签: 模拟, 线段树, 线段树动态开点, 树状数组, 平衡树思路*前置代码完整注释代码精简注释代码 *数据结构模板 题目 530. 列队 算法标签: 模拟, 线段树, 线段树动态开点, 树状数组, 平衡树 思路 首先考虑简单情况, 如果只有一行, 删除一个位置…...
PSN港服跳过生日找回密码(需要英语对话,需要注册的id)
登陆这个网站 https://www.playstation.com/en-hk/support/contact-us/?categoryAcc&subCategorypw 随便输入点名字 firstname 跟lastname 勾选,然后打开机器人聊天 然后按照提示输入邮箱跟id,输入正确之后会分配真人客服 真人客服会要求提供第一次…...
服务治理-服务注册
一个服务在真实项目部署的时候,如果压力较大,会做多实例部署。 在IDEA里面做多实例部署的话,只需要配置多个启动项。...
Jinja2模板引擎SSTI漏洞
1. 引入 再研究大模型相关应用的漏洞CVE-2025-25362时(参考1),看到作者给了比较详细的分析(参考2)。下面对这个漏洞做个介绍。 2. 漏洞类型 这个漏洞属于CWE-1336,它主要关注在使用模板引擎进行脚本化处…...
STM32单片机教程:从零开始打造智能天气时钟
STM32单片机教程:从零开始打造智能天气时钟 大家好!今天我想为大家详细介绍一下我们的STM32课程,以及如何从零基础逐步掌握单片机开发技能,最终实现一个完整的智能天气时钟项目。 课程面向人群 本课程主要面向那些已经通过野火…...
c++_csp-j算法 (1)
DFS搜索(深度优先搜索) 讲解 第一部分:DFS搜索算法简介 深度优先搜索(Depth-First Search,DFS)是一种常用的图搜索算法,用于遍历或搜索图或树的所有节点。DFS算法的核心思想是尽可能深地搜索图的分支,直…...
word选中所有的表格——宏
Sub 选中所有表格()Dim aTable As TableApplication.ScreenUpdating FalseActiveDocument.DeleteAllEditableRanges wdEditorEveryoneFor Each aTable In ActiveDocument.TablesaTable.Range.Editors.Add wdEditorEveryoneNextActiveDocument.SelectAllEditableRanges wdEdito…...
16、堆基础知识点和priority_queue的模拟实现
一、priority_queue的使用方法 priority_queue的使用方法看这篇文章 二、堆 1、介绍 堆(Heap)是一种特殊的完全二叉树数据结构,满足以下性质: 堆序性质(Heap Property): 大顶堆(…...
20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤
20250419将405的机芯由4LANE的LVDS OUT配置为8LANE的步骤 2025/4/19 15:38 查询格式YUV/RGB 81 09 04 24 60 FF 90 50 00 00 FF 查询辨率帧率 81 09 04 24 72 FF 90 50 01 03 FF 查询LVDS mode : Singel output/Dual output 81 09 04 24 74 FF 90 50 00 00 FF 配置405的机…...
【信息系统项目管理师】高分论文:论信息系统项目的采购管理(信息化办公系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划采购管理2、实施采购3、管理采购论文 随着信息化技术的发展,从企业到政府,传统的办公模式正在悄然消失,信息化办公模式正成为主流。特别是国务院印发的《关于加快推广“互联网+政务服务”工作的…...
国产GPU生态现状评估:从寒武纪到壁仞的编程适配挑战
近年来,国产GPU厂商在硬件性能上持续突破,但软件生态的构建仍面临严峻挑战。本文以寒武纪、壁仞等代表性企业为例,对比分析其与CUDA生态的兼容性差异,并探讨技术突围路径。 一、编程适配的核心挑战 编程模型差异与开发成本 …...
Linux(autoDL云服务器)mamba-ssm环境安装——一次成功!
1.创建环境选择torch2.0, cuda11.8,python3.8 2.从GitHub官网下载cp38对应的,causl_conv1d,和mamba-ssm2.2.2。下载入下图所示。 3.直接用finalshell 或者xshell连接服务器上传,到根目录下面。 直接用pip install *…...
手搓LeNet-5(基础模型)实现交通标志识别
手搓LeNet-5(基础模型)实现交通标志识别 一、环境准备1. 安装Python环境2. 安装CUDA(可选,仅需GPU加速时)3. 配置虚拟环境4. 安装PyTorch核心库5. 安装辅助库6. 验证安装7. 准备数据集8.常见问题处理 二、 数据集处理三…...
TV主板的拆解学习
下面是小米的电视机主板,电源采用PFCLLC方案,主控采用电视盒子主控采用晶晨半导体T962-H,搭配2G南亚DDR3L内存和8G三星eMMC存储器。 本文用来加深对TV主板的认识,学习于充电头网,链接在文末。 两颗蓝色插件Y电容来自S…...
PH热榜 | 2025-04-19
1. Omakase.ai Voice 标语:你的语音驱动销售助手。一个链接。 介绍:Omakase.ai Voice将您的网站转变为一个语音驱动的销售助手,它可以在客户浏览时进行对话、倾听并给出推荐。聊天机器人往往效果不佳——它们无法实现销售,而这个…...
LeetCode(Hot.2)—— 49.字符异位词分组题解
Problem: 49. 字母异位词分组 字母异位词的定义是:两个单词的字母组成一样,但顺序可以不同,比如 eat、tea 和 ate 就是一个组的。 思路 将每个字符串按字母排序,把排序后的字符串作为 key,相同 key 的放在一个 list 中…...
UE学习记录part19
231 insect: insect enemy type 创建dead动画资源 往insect head上添加socket 创建攻击root motion动画。motion warping需要与root motion合作使用 为buff_blue创建物理资产 设置simulate physic使sinsect死亡后能落到地板上而不是漂浮在空中,要将die函数设置为 -…...
不连续数据区间天数累计sql
计算不连续数据区间天数并且剔除重复天数 create table loan_data(loan_no varchar(10),cust_no varchar(10),start_date date,end_date date )INSERT INTO loan_data VALUES (LN001, CUST001, 2025-01-04, 2025-01-08); INSERT INTO loan_data VALUES (LN002, CUST001, 2025-…...
django基于爬虫的网络新闻分析系统的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
摘要 本网络新闻分析系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Python进行编写,使用了Django框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。前台主要功能包括:用户注册、登录、浏览…...
JAVA文件I/O
目录 一、三种路径的分类: 1、绝对路径: 2、相对路径: 3、基准目录: 二、文件的种类: 三、利用JAVA操作文件: 1、File类的构造方法: 2、File 类方法的使用: 使用例子&#…...
第七周作业
一、分别在前端和后端使用联合注入实现“库名-表名-字段名-数据”的注入过程,写清楚注入步骤 1、爆库 后端sql语句:select database(); 前端:1 order by 1#,1 order by 2#,1 order by 3# 判断显示位为两位1 union sel…...
Linux 进程信号详解
进程信号 信号是进程之间事件异步通知的一种方式,属于软中断。 kill -l //查看不同信号代表的事件 执行kill -l 可以看到共有62种信号,其中: 0-31号信号为非可靠信号(这部分信号借鉴于UNIX系统的信号);…...
MCP 应用案例-网络设备批量管理
案例背景 需求痛点 企业需管理数百台跨地域网络设备(交换机/路由器),传统方式存在: 人工SSH登录效率低脚本维护成本高(不同厂商CLI语法差异)状态监控依赖独立监控系统 解决方案 通过MCP协议构建智能网络…...
进程程序替换
fork() 之后,⽗⼦各⾃执⾏⽗进程代码的⼀部分如果⼦进程就想执⾏⼀个全新的程序呢?进程的程序 替换来完成这个功能! 程序替换是通过特定的接⼝,加载磁盘上的⼀个全新的程序(代码和数据),加载到调⽤进程的地址空间中!…...
6.7 ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南
ChatGPT自动生成定时任务脚本:Python与Cron双方案实战指南 关键词:定时任务调度, ChatGPT 代码生成, Cron 脚本开发, Python 调度器, 自动化更新系统 6.3 使用 ChatGPT 生成 Cron 调度脚本 在 GitHub Sentinel 的定期更新功能中,定时任务调度是核心模块。本节演示如何通过…...
废物九重境弱者学JS第十四天--构造函数以及常用的方法
目录 JavaScript 进阶 - 第2天 深入对象 构造函数 实例成员 静态成员 内置构造函数 Object Array 包装类型 String Number 案例 JavaScript 进阶 - 第2天 了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,…...
机器学习+深度学习
文章目录 一、机器学习(一)机器学习概念(二)机器学习基本流程(三)机器学习应用场景二、机器学习的常见工具与相关库(一)Python 机器学习库(二)数据处理库(三)可视化库三、聚类算法思想与模型搭建过程(一)K - Means 聚类算法(二)DBSCAN 聚类算法四、分类算法思想…...
docker基本使用命令
一、镜像 1、拉取镜像 docker pull busybox docker pull nginx:1.26-alpine 2、查看本地镜像 [rootRocky-1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 4e1b6bae1e48 18 hours ago 192MB busybox lates…...
相机模型--CMOS和CCD的区别
1--CMOS和CCD的工作原理 CCD(Charge Coupled Device,电荷耦合器件): 1. 图像通过光电效应在感光单元中转化为电荷; 2. 每个像素上的电荷被依次“耦合”并传输到芯片的角落,通过一个或几个模拟输出放大器输…...
触发器(详解)
一:MySQL触发器 MySQL数据库中触发器是一个特殊的存储过程。 不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 MySQL自动调用。 引发…...
Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据
Vue 3 中使用 ref 创建的响应式对象数据转换为普通(非响应式)的数据,有以下几种方法: 1. 访问 .value 属性: 这是最直接、最常见的方法。 由于 ref 对象的值存储在其 .value 属性中,直接访问该属性即可获得普通数据。…...
Vue基础(6)_键盘事件
普通键盘事件 键盘事件常用的有两个:keydown、keyup。 举例: <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><script type"text/javascript" src"../js/vue.js"&…...
Kubernetes控制平面组件:高可用 APIServer
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
这个是我的qss按钮样式 和之前的// 应用全局样式表 QString style = R“(是会冲突吗,导致我的按钮背景颜色是黑色,我该怎么修改
/* 样式 A */ *[style-type="A"] { background-color:#cfd1d4; border: none; border-radius: 50%; /* 圆形边框 */ padding: 7px 14px; } *[style-type="A"]:hover { background-color: #45a049; }这个是我的qss按钮样式 和之前的// 应用全局样式表 QStri…...
Kubernetes控制平面组件:API Server详解(二)
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
人工智能在智慧农业中的应用:从田间到餐桌的变革
农业是人类社会的基石,随着全球人口的增长和资源的日益紧张,传统农业面临着巨大的挑战。近年来,人工智能(AI)技术的快速发展为农业带来了新的机遇。智慧农业通过将AI技术与农业生产相结合,实现了从田间种植…...
多人3D游戏完整实现方案
以下是一份完整的代码实现方案,涵盖架构设计、核心模块实现和部署流程。我们以 多人3D游戏 为例,结合之前讨论的Nano服务端框架和Unity客户端: 技术栈 模块技术选型服务端Golang + Nano框架 + MongoDB客户端Unity 2022 + C# + Mirror Networking通信协议Protobuf + WebSock…...
FFUF指南
ffuf 的核心功能: 目录/文件发现: 通过暴力破解(使用字典)探测目标网站的隐藏目录或文件,例如: ffuf -w /path/to/wordlist.txt -u http://target.com/FUZZ 子域名枚举: 通过模糊测试发现目标…...
详细的PyCharm安装教程
详细的PyCharm安装教程 安装前准备 确认系统要求: Windows:Microsoft Windows 10 1809 64位或更高版本,Windows Server 2019 64位或更高版本。 macOS:12.0或更高版本。 Linux:满足以下要求的两个最新版本的Ubuntu LTS或…...
FPGA IO引脚 K7-认知4
UG475来知道bank, GTX, Pin数量, Package, Pinout 时钟 SRCC(Single-Region Clock Capable I/O)和MRCC(Multi-Region Clock Capable I/O)是专用的时钟输入/输出引脚。 如 2.DQS...
C++——异常
1. C语言错误处理机制 我们在曾经介绍过C语言下的错误码。错误码我们过去经常见到,错误码通常是指errno变量中的值,它表示特定操作(如系统调用或库函数)发生错误的原因。errno是一个全局变量,当出现错误时会自动将错误…...
vue3 中 iframe 多页面切换导致资源刷新的问题解决
最近发现一个问题,我在使用 websocket 的时候,在主页面进行了 websocket 连接了之后,再使用 iframe 打开子页面的时候,通常会触发页面刷新,这样就导致 WebSocket 断开,这是因为切换 src 会重新加载 iframe …...
php多种方法实现xss过滤
1. 使用 htmlspecialchars() 函数 htmlspecialchars() 是一个PHP内置函数,用于将特殊字符转换为HTML实体,从而防止浏览器将其解释为HTML或脚本代码。 <?phpfunction sanitizeInput($input) {// 将特殊字符转换为HTML实体return htmlspecialchars($…...
蓝桥杯练习题2
动态规划 动态规划三大题型:计数问题、最值问题、存在性问题; 【最小权值】-- 最值问题 【题目分析】 import java.util.Arrays; Arrays类中的一个方法:Arrays.fill(int[] m,int n) //给 int 类型(或者char类型/Long类型...)的数组全部空间…...
Python遥感开发之Hurst指数的实现
Python遥感开发之Hurst指数的实现 主要讲解Python实现Hurst指数,实现遥感下的Hurst指数,对Hurst指数进行分类,以及结合slope指数实现对未来变化趋势的分析。 文章目录 Python遥感开发之Hurst指数的实现0 什么是Hurst指数1 Python实现Hurst指…...
opencv 给图片和视频添加水印
给图片和视频添加水印 1 给图片添加水印2 给视频添加水印 1 给图片添加水印 代码如下: 添加水印 imgcv2.imread(r../15day4.10/src/xiaoren.png) img2cv2.imread(r../15day4.10/src/bg.png) h,w,cimg.shapeRIO_img2img2[100:100h,200:200w]img3cv2.cvtColor(img,…...
国网B接口协议图像数据上报通知接口流程详解以及上报失败原因(电网B接口)
文章目录 一、B接口协议图像数据上报通知接口介绍B.13.1 接口描述B.13.2 接口流程B.13.3 接口参数B.13.3.1 SIP头字段B.13.3.2 SIP响应码B.13.3.3 XML Schema参数定义 B.13.4 消息示例B.13.4.1 图像数据上报请求B.13.4.2 图像数据上报响应 二、B接口图像数据上报通知失败常见问…...