Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据
作者:来自 Elastic James Williams
了解如何使用 Azure AI 文档智能解析包含文本和表格数据的 PDF 文档。
Azure AI 文档智能是一个强大的工具,用于从 PDF 中提取结构化数据。它可以有效地提取文本和表格数据。提取的数据可以索引到 Elastic Cloud Serverless,以支持 RAG(Retrieval Augmented Generation - 检索增强生成)。
在这篇博客中,我们将通过摄取四份最新的 Elastic N.V. 季度报告来演示 Azure AI 文档智能的强大功能。这些 PDF 文档的页数从 43 页到 196 页不等,每个 PDF 都包含文本和表格数据。我们将使用以下提示测试表格数据的检索:比较/对比 Q2-2025、Q1-2025、Q4-2024 和 Q3-2024 的订阅收入?
这个提示比较复杂,因为它需要来自四个不同 PDF 的上下文,这些 PDF 中的相关信息以表格格式呈现。
让我们通过一个端到端的参考示例来了解,这个示例由两个主要部分组成:
Python 笔记本
- 下载四个季度的 Elastic N.V. 10-Q 文件 PDF
- 使用 Azure AI 文档智能解析每个 PDF 文件中的文本和表格数据
- 将文本和表格数据输出到 JSON 文件
- 将 JSON 文件摄取到 Elastic Cloud Serverless
Elastic Cloud Serverless
- 为 PDF 文本 + 表格数据创建向量嵌入
- 为 RAG 提供向量搜索数据库查询
- 预配置的 OpenAI 连接器用于 LLM 集成
- A/B 测试界面用于与 10-Q 文件进行对话
前提条件
此笔记本中的代码块需要 Azure AI Document Intelligence 和 Elasticsearch 的 API 密钥。Azure AI Document Intelligence 的最佳起点是创建一个 Document Intelligence 资源。对于 Elastic Cloud Serverless,请参考入门指南。你需要 Python 3.9+ 来运行这些代码块。
创建 .env 文件
将 Azure AI Document Intelligence 和 Elastic Cloud Serverless 的密钥放入 .env 文件中。
AZURE_AI_DOCUMENT_INTELLIGENCE_ENDPOINT=YOUR_AZURE_RESOURCE_ENDPOINT
AZURE_AI_DOCUMENT_INTELLIGENCE_API_KEY=YOUR_AZURE_RESOURCE_API_KEYES_URL=YOUR_ES_URL
ES_API_KEY=YOUR_ES_API_KEY
安装 Python 包
!pip install elasticsearch python-dotenv tqdm azure-core azure-ai-documentintelligence requests httpx
创建输入和输出文件夹
import osinput_folder_pdf = "./pdf"
output_folder_pdf = "./json"folders = [input_folder_pdf, output_folder_pdf]def create_folders_if_not_exist(folders):for folder in folders:os.makedirs(folder, exist_ok=True)print(f"Folder '{folder}' created or already exists.")create_folders_if_not_exist(folders)
下载 PDF 文件
下载四个最近的 Elastic 10-Q 季度报告。如果你已经有了 PDF 文件,可以将它们放在 ‘./pdf’ 文件夹中。
import os
import requestsdef download_pdf(url, directory='./pdf', filename=None):if not os.path.exists(directory):os.makedirs(directory)response = requests.get(url)if response.status_code == 200:if filename is None:filename = url.split('/')[-1]filepath = os.path.join(directory, filename)with open(filepath, 'wb') as file:file.write(response.content)print(f"Downloaded {filepath}")else:print(f"Failed to download file from {url}")print("Downloading 4 recent 10-Q reports for Elastic NV.")
base_url = 'https://s201.q4cdn.com/217177842/files/doc_financials'
download_pdf(f'{base_url}/2025/q2/e5aa7a0a-6f56-468d-a5bd-661792773d71.pdf', filename='elastic-10Q-Q2-2025.pdf')
download_pdf(f'{base_url}/2025/q1/18656e06-8107-4423-8e2b-6f2945438053.pdf', filename='elastic-10Q-Q1-2025.pdf')
download_pdf(f'{base_url}/2024/q4/9949f03b-09fb-4941-b105-62a304dc1411.pdf', filename='elastic-10Q-Q4-2024.pdf')
download_pdf(f'{base_url}/2024/q3/7e60e3bd-ff50-4ae8-ab12-5b3ae19420e6.pdf', filename='elastic-10Q-Q3-2024.pdf')
使用 Azure AI Document Intelligence 解析 PDF
在解析 PDF 文件的代码块中有很多内容。以下是简要总结:
- 设置 Azure AI Document Intelligence 导入和环境变量
- 使用 AnalyzeResult 解析 PDF 段落
- 使用 AnalyzeResult 解析 PDF 表格
- 结合 PDF 段落和表格数据
- 通过对每个 PDF 文件执行 1-4 步,整合所有结果并将其存储为 JSON
设置 Azure AI Document Intelligence 导入和环境变量
最重要的导入是 AnalyzeResult。这个类表示文档分析的结果,并包含关于文档的详细信息。我们关心的细节包括页面、段落和表格。
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.documentintelligence import DocumentIntelligenceClient
from azure.ai.documentintelligence.models import AnalyzeResult
from azure.ai.documentintelligence.models import AnalyzeDocumentRequest
import json
from dotenv import load_dotenv
from tqdm import tqdmload_dotenv()AZURE_AI_DOCUMENT_INTELLIGENCE_ENDPOINT = os.getenv('AZURE_AI_DOCUMENT_INTELLIGENCE_ENDPOINT')
AZURE_AI_DOCUMENT_INTELLIGENCE_API_KEY = os.getenv('AZURE_AI_DOCUMENT_INTELLIGENCE_API_KEY')
使用 AnalyzeResult 解析 PDF 段落
从每个页面提取段落文本。不要提取表格数据。
def parse_paragraphs(analyze_result):table_offsets = []page_content = {}for paragraph in analyze_result.paragraphs: for span in paragraph.spans:if span.offset not in table_offsets:for region in paragraph.bounding_regions:page_number = region.page_numberif page_number not in page_content:page_content[page_number] = []page_content[page_number].append({"content_text": paragraph.content})return page_content, table_offsets
使用 AnalyzeResult 解析 PDF 表格
从每个页面提取表格内容。不要提取段落文本。这个技术最有趣的副作用是,无需转换表格数据。LLM 知道如何读取看起来像 “单元格 [0, 1]:表格数据……” 的文本。
def parse_tables(analyze_result, table_offsets):page_content = {}for table in analyze_result.tables:table_data = []for region in table.bounding_regions:page_number = region.page_numberfor cell in table.cells:for span in cell.spans:table_offsets.append(span.offset)table_data.append(f"Cell [{cell.row_index}, {cell.column_index}]: {cell.content}")if page_number not in page_content:page_content[page_number] = []page_content[page_number].append({"content_text": "\n".join(table_data)})return page_content
结合 PDF 段落和表格数据
在页面级别进行预处理分块以保留上下文,这样我们可以轻松手动验证 RAG 检索。稍后,你将看到,这种预处理分块不会对 RAG 输出产生负面影响。
def combine_paragraphs_tables(filepath, paragraph_content, table_content):page_content_concatenated = {}structured_data = []# Combine paragraph and table contentfor p_number in set(paragraph_content.keys()).union(table_content.keys()):concatenated_text = ""if p_number in paragraph_content:for content in paragraph_content[p_number]:concatenated_text += content["content_text"] + "\n"if p_number in table_content:for content in table_content[p_number]:concatenated_text += content["content_text"] + "\n"page_content_concatenated[p_number] = concatenated_text.strip()# Append a single item per page to the structured_data listfor p_number, concatenated_text in page_content_concatenated.items():structured_data.append({"page_number": p_number,"content_text": concatenated_text,"pdf_file": os.path.basename(filepath)})return structured_data
把所有内容结合在一起
打开 ./pdf 文件夹中的每个 PDF,解析文本和表格数据,并将结果保存为 JSON 文件,该文件包含 page_number、content_text 和 pdf_file 字段。content_text 字段表示每个页面的段落和表格数据。
pdf_files = [os.path.join(input_folder_pdf, file)for file in os.listdir(input_folder_pdf)if file.endswith(".pdf")
]document_intelligence_client = DocumentIntelligenceClient(endpoint=AZURE_AI_DOCUMENT_INTELLIGENCE_ENDPOINT, credential=AzureKeyCredential(AZURE_AI_DOCUMENT_INTELLIGENCE_API_KEY),connection_timeout=600
)for filepath in tqdm(pdf_files, desc="Parsing PDF files"):with open(filepath, "rb") as file:poller = document_intelligence_client.begin_analyze_document("prebuilt-layout",AnalyzeDocumentRequest(bytes_source=file.read()))analyze_result: AnalyzeResult = poller.result()paragraph_content, table_offsets = parse_paragraphs(analyze_result)table_content = parse_tables(analyze_result, table_offsets)structured_data = combine_paragraphs_tables(filepath, paragraph_content, table_content)# Convert the structured data to JSON formatjson_output = json.dumps(structured_data, indent=4)# Get the filename without the ".pdf" extensionfilename_without_ext = os.path.splitext(os.path.basename(filepath))[0]# Write the JSON output to a fileoutput_json_file = f"{output_folder_pdf}/{filename_without_ext}.json"with open(output_json_file, "w") as json_file:json_file.write(json_output)
加载数据到 Elastic Cloud Serverless
以下代码块处理:
- 设置 Elasticsearch 客户端和环境变量的导入
- 在 Elastic Cloud Serverless 中创建索引
- 将 ./json 目录中的 JSON 文件加载到 pdf-chat 索引中
设置 Elasticsearch 客户端和环境变量的导入
最重要的导入是 Elasticsearch。这个类负责连接到 Elastic Cloud Serverless,创建并填充 pdf-chat 索引。
import json
from dotenv import load_dotenv
from elasticsearch import Elasticsearch
from tqdm import tqdm
import osload_dotenv()ES_URL = os.getenv('ES_URL')
ES_API_KEY = os.getenv('ES_API_KEY')es = Elasticsearch(hosts=ES_URL,api_key=ES_API_KEY, request_timeout=300)
在 Elastic Cloud Serverless 中创建索引
此代码块创建一个名为 “pdf_chat” 的索引,并具有以下映射:
-
page_content - 用于通过全文搜索测试 RAG
-
page_content_sparse - 用于通过稀疏向量测试 RAG
-
page_content_dense - 用于通过密集向量测试 RAG
-
page_number - 对于构建引用很有用
-
pdf_file - 对于构建引用很有用
注意使用了 copy_to
和 semantic_text
。copy_to
工具将 body_content 复制到两个语义文本(semantic_text)字段。每个语义文本字段都映射到一个 ML 推理端点,一个用于稀疏向量,一个用于密集向量。由 Elastic 提供的 ML 推理会自动将每页分成 250 个 token 的块,并有 100 个 token 的重叠。
index_name= "pdf-chat"
index_body = {"mappings": {"properties": {"page_content": {"type": "text", "copy_to": ["page_content_sparse","page_content_dense"]},"page_content_sparse": {"type": "semantic_text", "inference_id": ".elser-2-elasticsearch"},"page_content_dense": {"type": "semantic_text", "inference_id": ".multilingual-e5-small-elasticsearch"},"page_number": {"type": "text"},"pdf_file": {"type": "text", "fields": {"keyword": {"type": "keyword"}}}}}
}if es.indices.exists(index=index_name):es.indices.delete(index=index_name)print(f"Index '{index_name}' deleted successfully.")response = es.indices.create(index=index_name, body=index_body)
if 'acknowledged' in response and response['acknowledged']:print(f"Index '{index_name}' created successfully.")
elif 'error' in response:print(f"Failed to create: '{index_name}'") print(f"Error: {response['error']['reason']}")
else:print(f"Index '{index_name}' already exists.")
将 JSON 文件从 ./json
目录加载到 pdf-chat
索引
此过程将花费几分钟时间,因为我们需要:
-
加载 402 页 PDF 数据
-
为每个
page_content
块创建稀疏文本嵌入 -
为每个
page_content
块创建密集文本嵌入
files = os.listdir(output_folder_pdf)
with tqdm(total=len(files), desc="Indexing PDF docs") as pbar_files:for file in files:with open(output_folder_pdf + "/" + file) as f:data = json.loads(f.read())with tqdm(total=len(data), desc=f"Processing {file}") as pbar_pages:for page in data:doc = {"page_content": page['content_text'],"page_number": page['page_number'],"pdf_file": page['pdf_file']}id = f"{page['pdf_file']}_{page['page_number']}"es.index(index=index_name, id=id, body=json.dumps(doc))pbar_pages.update(1)pbar_files.update(1)
最后还有一个代码技巧需要提到。我们将通过以下命名约定设置 Elastic 文档 ID:FILENAME_PAGENUMBER
。这样可以方便地查看与引用关联的 PDF 文件和页面号码,在 Playground 中进行验证。
Elastic Cloud Serverless
Elastic Cloud Serverless 是原型化新 Retrieval-Augmented Generation (RAG) 系统的绝佳选择,因为它提供了完全托管的可扩展基础设施,避免了手动集群管理的复杂性。它开箱即用地支持稀疏和密集向量搜索,使你能够高效地实验不同的检索策略。借助内置的语义文本嵌入、相关性排名和混合搜索功能,Elastic Cloud Serverless 加速了搜索驱动应用程序的迭代周期。
借助 Azure AI Document Intelligence 和一些 Python 代码,我们准备好了看看是否能让 LLM 在真实数据的基础上回答问题。让我们打开 Playground,并使用不同的查询策略进行一些手动 A/B 测试。
Full text search
这个查询将返回与全文搜索匹配的前十页内容。
全文搜索差不多能够提供正确的答案,但仅能提供四个季度中的三个季度的正确答案。这是可以理解的,因为我们将十整页的数据塞入了 LLM 的上下文中。而且,我们没有利用语义搜索。
Sparse vector search
这个查询将返回匹配我们查询的页面中,使用强大的稀疏向量搜索的前两个语义文本片段。
由 Elastic 的 ELSER 提供支持的稀疏向量搜索在从所有四个 PDF 文件中检索表格数据方面做得非常好。我们可以通过打开与每个引用相关的 PDF 页面号码轻松核对答案。
Dense vector search
Elastic 还提供了一个出色的稠密向量选项用于语义文本(E5)。E5 非常适用于多语言数据,并且在每秒高查询量的用例中具有更低的推理延迟。这个查询将返回与我们的用户输入匹配的前两个语义文本片段。结果与稀疏搜索相同,但请注意两个查询的相似之处。唯一的区别是 “field” 名称。
混合搜索
ELSER 对于这个用例非常有效,以至于我们不需要混合搜索。但是,如果我们想要,我们可以将稠密向量搜索和稀疏向量搜索结合到一个查询中。然后,使用 RRF(Reciprocal rank fusion - 倒排排名融合)对结果进行重新排序。
我们学到了什么?
Azure AI Document Intelligence
- 非常擅长解析 PDF 文件中的文本和表格数据。
- 与 Elasticsearch Python 客户端集成良好。
Elastic Serverless Cloud
- 在数据摄取和查询时,内置了用于稀疏和稠密向量嵌入的 ML 推理。
- 拥有强大的 RAG A/B 测试工具,可用于确定最佳的检索技术以适应特定的用例。
还有其他技术和方法可以用来解析 PDF 文件。如果你的组织完全使用 Azure,这种方法可以提供一个优秀的 RAG 系统。
想要获得 Elastic 认证吗?了解下次 Elasticsearch 工程师培训的时间!
Elasticsearch 提供了许多新特性,帮助你为你的用例构建最佳的搜索解决方案。深入了解我们的示例笔记本,开始免费云试用,或者立即在本地机器上尝试 Elastic。
原文:Parse PDF text and table data with Azure AI Document Intelligence - Elasticsearch Labs
相关文章:
Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据
作者:来自 Elastic James Williams 了解如何使用 Azure AI 文档智能解析包含文本和表格数据的 PDF 文档。 Azure AI 文档智能是一个强大的工具,用于从 PDF 中提取结构化数据。它可以有效地提取文本和表格数据。提取的数据可以索引到 Elastic Cloud Serve…...
如何 编译 px4
DeepSeek-R1满血版 回答完成 深度思考完成 用时27秒,搜索全网29篇资料 以下是详细的PX4固件编译教程,综合多平台及常见问题解决方案: 一、环境准备 系统要求 Ubuntu 20.04/22.04(推荐)或 MacOS 12 Windo…...
pycharm2024.1.1版本_jihuo
目录 前置: 步骤: step one 下载软件 step two 卸载旧版本 1 卸载软件 2 清除残余 step three 下载补丁 step four 安装2024.1.1版本软件 step five 安装补丁 1 找位置放补丁 2 自动设置环境变量 step six 输入jihuo码 前置: 之…...
LLaMA Factory微调后的大模型在vLLM框架中对齐对话模版
LLaMA Factory微调后的大模型Chat对话效果,与该模型使用vLLM推理架构中的对话效果,可能会出现不一致的情况。 下图是LLaMA Factory中的Chat的对话 下图是vLLM中的对话效果。 模型回答不稳定:有一半是对的,有一半是无关的。 1、未…...
Vulnhub:Digitalword.local: FALL靶机渗透
将靶机按照图中连接方式打开,fall在virtualBox中打开 信息收集 扫描得ip arp-scan -l 扫描端口 nmap -A -T4 -sV -p- 扫描目录 gobuster dir -u http://192.168.117.160 -x php,txt,html -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt 一个一个…...
androidstudio安装完成后创建新的示例项目编译报错解决
项目场景: 提示:这里简述项目相关背景: 安装完成android studio想要编译一个自带的demo项目,没想到一直有编译报错,最后终于搞好了,记录下避免再踩坑。 androidstudio安装完成后创建新的示例项目编译报错…...
C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿、推荐…...
QT 跨平台发布指南
一、Windows 平台发布 1. 使用 windeployqt 工具 windeployqt --release --no-compiler-runtime your_app.exe 2. 需要包含的文件 应用程序 .exe 文件 Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll 等 Qt 库 platforms/qwindows.dll 插件 styles/qwindowsvistastyle.dll (如果使…...
数制——FPGA
1、定点数 定点数的三种表示方式: 原码:符号位 绝对值 表示方法 反码:正数的反码表示 与原码表示一致,负数的反码表示 除符号位,其他位全都取反 补码:正数的补码表示 与原码表示一致,负数的补码…...
车载以太网网络测试 -25【SOME/IP-报文格式-1】
1 摘要 本专题接着上一专题对SOME/IP进行介绍,主要对SOME/IP报文格式以及定义的字段进行详细介绍,有助于在实际项目过程中对SOME/IP报文的理解。 上文回顾: 车载以太网网络测试 -24【SOME/IP概述】 2 SOME/IP-报文格式 通过上个专题介绍&a…...
Kubernetes》》k8s》》Replication Controller
RC(Replication Controller) 应用托管在kubernetes之后,kubernetes需要保证应用能够持续运行,这是RC的工作内容,它会确保任何时间kubernetes中都有指定数量的Pod在运行。在此基础上,RC还提供了一些更高级的特性,比如滚…...
力扣HOT100之矩阵:73. 矩阵置零
这道题我没有想到什么好的办法,直接暴力AC了,直接遍历两次矩阵,第一次遍历用两个向量分别记录出现0的行数和列数,第二次遍历就判断当前的元素的行数或者列数是否出现在之前的两个向量中,若出现了就直接置零,…...
天锐蓝盾终端安全防护——企业终端设备安全管控
从办公室的台式电脑到员工手中的移动终端,这些设备不仅是工作的得力助手,更是企业数据的重要载体。然而,随着终端设备的广泛使用,安全风险也如影随形。硬件设备使用不当、数据随意传输等问题频发,使得企业数据面临着泄…...
【博客】使用GithubAction自动同步obisidian和hexo仓库
使用Github Action自动同步obisidian和hexo仓库,避免手动操作。 本文首发于❄慕雪的寒舍 1. 烦恼 先来说说慕雪现在的笔记和博客是怎么管理的吧,我正在使用两套笔记软件 思源笔记:私密性高一些,不是博客的笔记都在这里面。由于思…...
UE5学习笔记 FPS游戏制作23 区分敌我,寻找敌对角色
文章目录 方法1 tag方法2 变量添加变量和函数防止队友伤害 修改Task使用球形检测查找敌人场景面板直接编辑属性 方法1 tag 角色蓝图身上有一个tag标签,可以通过标签内容区分队伍 通过ActorHasTag判断一个Actor是否有对应的标签 方法2 变量 添加变量和函数 在s…...
ECharts各类炫酷图表/3D柱形图
一、前言 最近鸡米花实现了各类的炫酷的图表,有3D柱形图、双边柱形图以及异形柱形图,好了,直接上图: 二、效果图 一个个来吧,下面就是代码啦,注意,一下图表展示的宽高均为800px*300px 三、异形横…...
AI基础03-视频数据采集
上篇文章我们学习了图片的数据采集,今天主要了解一下视频数据采集的方法。视频是由一系列图像构成的,其中每一张图片就是一帧。视频数据采集方法通常有自动图像采集和基于处理器的图像采集两种。我们学习一下如何利用python 工具和笔记本计算机摄像头进行…...
docker-compose部署prometheus+grafana+node_exporter+alertmanager规则+邮件告警
目录 一.docker-compose文件 二.配置文件 三.文件层级关系,docker-compose和配置文件位于同级目录 四.node_exporter页面json文件 五.效果展示 prometheusalertmanager邮件告警 grafana面板效果 六.涉及离线包 一.docker-compose文件 [rootsulibao prometh…...
CPM:大规模生成式中文预训练语言模型
摘要 预训练语言模型(PLMs)已被证明对各种下游自然语言处理(NLP)任务有益。最近,GPT-3 以 1750 亿参数和 570GB 训练数据引起了广泛关注,因为它具备少样本(甚至零样本)学习的能力。…...
k8s scheduler几种扩展方式的关系及区别
网上关于scheduler扩展介绍的文章很多,但都是东说一句西说一嘴,完全没有逻辑性,对于逻辑建构者看着很痛苦,这篇文章不会深入教你怎么扩展,而是教你几种扩展方式的关系和逻辑结构: 目前Kubernetes支持五种方…...
Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理
在现代企业级应用开发中,前后端分离已成为主流模式,前端负责界面呈现,后端专注提供 RESTful API 接口。然而,接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为开发者…...
前端D3.js面试题及参考答案
目录 解释 D3.js 中 enter ()、update ()、exit () 的作用及典型应用场景 描述数据连接(Data Join)的原理,如何通过 data () 方法实现数据集与 DOM 元素的动态绑定? 如何利用 datum () 实现单个元素的数据绑定?与 data () 有何区别? 在动态数据更新时,如何通过 merge…...
Docker实现MySQL主从复制配置【简易版】
Docker实现MySQL主从复制配置 环境准备 安装docker 拉取MySQL 8.0镜像 docker pull mysql:8.0#检查 docker images | grep mysql代码流程 由于Mysql8.0的ssl验证十分繁琐,在创建容器的时候一定要禁掉 创建自定义网络 docker network create mysql-replication-ne…...
IDEA中打开项目Vue+Vue基本语法
一、IDEA中打开项目 1.IDEA中安装Vue基本插件 2.项目结构 项目根目录 node_modules : npm 加载的项目依赖模块 public : 存放静态资源,如图片、视频等。 src : 项目源码目录,包含主要的开发文件。 index.html : 首页入口文件,可以添…...
【深度学习新浪潮】图像修复(Image Inpainting)技术综述:定义、进展与应用展望
本文为精简版,完整技术细节与参考文献可与作者讨论。 1. 图像修复的定义与核心目标 图像修复(Image Inpainting)是一种通过算法手段填补图像中缺失区域或移除不需要对象的技术,其核心目标是利用图像上下文信息生成与周围像素一致且视觉自然的内容。该技术通过计算机视觉和…...
【实战】解决图片 Hover 抖动问题的完整指南
在开发网站时,很多人都会遇到一个常见问题:鼠标移动到图片上,图片放大,结果发生抖动或闪烁。这个问题往往伴随着后端接口请求、JS 动态追加 DOM 等复杂行为。 本文将深入剖析这个问题的成因,并提供一套彻底的解决方案…...
java容器
一、List 接口实现类 1. ArrayList 特性:基于动态数组实现,支持快速随机访问(时间复杂度 O(1)),但插入/删除元素时需移动后续元素(时间复杂度 O(n)) 一、核心方法分类 添加元素 add(E e):尾部追加元素,均摊时间复杂度O(1)add(int index, E element):指定位置插入…...
arthas之jvm相关命令
文章目录 1. dashboard2. thread线程相关3. jvmTHREAD相关文件描述符相关 4. sysprop5. 小结6. sysenv7. vmoption8. getstatic9. ognl10. 小结 1. dashboard 作用:显示当前系统的实时数据面板,按q或ctrlc退出 数据说明 ID: Java级别的线程IDÿ…...
UDP视频传输中的丢包和播放花屏处理方法
在处理UDP视频传输中的丢包和花屏问题时,需要结合编码优化、网络传输策略和接收端纠错技术。以下是分步骤的解决方案: 1. 前向纠错(FEC,Forward Error Correction) 原理:在发送数据时附加冗余包,接收方通过冗余信息恢复丢失的数据包。 实现方法: 使用Reed-Solomon、XO…...
蓝桥杯 班级活动
问题描述 小明的老师准备组织一次班级活动。班上一共有 n 名同学(n 为偶数),老师想把所有同学进行分组,每两名同学一组。 为了公平,老师给每名同学随机分配了一个 n 以内的正整数作为 id,第 i 名同学的 i…...
Open webui的使用
问题 之前本地量化模型管理器ollama的文章,我们知道可以通过ollama来管理本地量化模型,也能够在命令行中与相关模型进行对话。现在我们想要在有个web页面通过浏览器来与本地模型对话。这里我们就使用Open webui作为界面来与本地模型对话。 安装启动 这…...
页面重构过程中如何保证良好的跨浏览器一致性?
在页面重构的过程中,为了确保网页能够在不同的浏览器中呈现一致的效果,我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点: 使用标准化的HTML和CSS:始终遵循最新的Web标准编写代码,例如采用…...
Python库与Excel
目录 一、库 1、Python自带的库 2、第三方库 3、第三方库的安装 二、import的用法 三、datetime库 1、处理日期 2、处理时刻 3、局限性 四、random库 1、函数 2、随机种子 3、发牌模拟器 五、jieba库 六、openpyxl库 1、表格读取 2、表格元素遍历 3、工作表的…...
记录一下最近参与实习 外包 社招流程里的一些感悟
记录一下最近参与实习 外包 社招流程里的一些感悟 1.简历门面要重视 1.简历非常重要,它是你的门面 初步了解到你的一个实习/工作经历,然后掌握的技术栈,是否与当前项目匹配,哪些模块上的设计是我们想要重点关注的,可…...
流动的梦境:GPT-4o 的自回归图像生成深度解析
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
HarmonyOS NEXT开发进阶(十四):HarmonyOS应用开发者基础认证试题集汇总及答案解析
文章目录 一、前言二、判断题(134道)三、单选题(210道)四、多选题(123道)五、拓展阅读 一、前言 鸿蒙原生技能学习阶段,通过官方认证的资格十分有必要,在项目实战前掌握基础开发理论…...
Visual Studio Code(简称 VS Code)下载与使用教程1(新建文件,语法高亮,快捷键,主题,快捷指令)
简介 由 微软(Microsoft) 开发的 免费、开源、跨平台 的 代码编辑器,广泛用于编程开发、文本编辑和调试。 主要功能 代码编辑:支持几乎所有编程语言(Python、JavaScript、Java、C、Go 等),提供…...
3.28前端模拟面试
针对你 1.5 年的前端经验,结合 Vue 3、TypeScript、微前端(qiankun)等背景,我准备了一套模拟面试题,偏向场景化问题,考察你的实战经验和思维能力。 一、工程化 & 架构 你们的前端项目使用 qiankun 做微…...
pip 安装某个包之后,Jupyter Lab仍旧显示包冲突;例如:Numba needs NumPy 2.1 or less. Got NumPy 2.2.
异常提示 Numba needs NumPy 2.1 or less. Got NumPy 2.2. --------------------------------------------------------------------------- ImportError Traceback (most recent call last) Cell In[8], line 53 import pywt4 import matplot…...
Python:爬虫概念与分类
网络请求: https://www.baidu.com url——统一资源定位符 请求过程: 客户端,指web浏览器向服务器发送请求 请求:请求网址(request url);请求方法(request methods);请求头(request header)&…...
flask开发中设置Flask SQLAlchemy 的 db.Column 只存储非负整数(即 0 或正整数)
如果你想控制一个 Flask SQLAlchemy 的 db.Column 只存储非负整数(即 0 或正整数),你可以在模型中使用验证来确保这一点。一种常见的方法是使用模型的 validate 方法或者在执行插入或更新操作时进行检查。 以下是实现这一目标的几种方法&…...
从0到1解决项目问题经验-Vue3前端
问题1: 我有文件里面这么一段代码,但是现在有个问题,就是在设备信息详情的抽屉页面中,当我首次点击查看的时候,显示的物流中心名称现在是跟"deviceInfo.logisticsCenterName"做的绑定,于是现在显…...
Vue.js的CSS过渡与动画:常用案例解析
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
【论文阅读】Co2l: Contrastive continual learning
原文链接:[2106.14413] Co$^2$L: Contrastive Continual Learning 阅读本文前,需要对持续学习的基本概念以及面临的问题有大致了解,可参考综述: Wang L, Zhang X, Su H, et al. A comprehensive survey of continual learning: …...
Python给对象数组排序
文章目录 1. 使用sorted()函数(返回新的排序后的列表)2. 使用list.sort()方法(原地排序,不返回新列表)3. 如果数据结构是集合(set),集合本身是无序的,无法直接排序&#…...
Docker-清理容器空间prune
docker system prune -a 是一个非常有用的命令,用于清理 Docker 系统中未使用的资源,包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像(悬空镜像和所有未使用的镜像)。以下是关于该命令的详细说明: 命令…...
Kubernetes》》K8S》》Deployment 、Pod、Rs 、部署 nginx
Deployment deployment文档说明 kubectl get rs,deployment,pods 删除pod 、deployment 、service # 如果只删除pod,deployment会自动重建,所以应该先删除deployment。 # 下面演示的是删除所有deployment,可以指定只删除某个 # 删除所有…...
【Zookeeper搭建】Zookeeper分布式集群搭建完整指南
Zookeeper分布式集群搭建 (一)克隆前准备工作 一、时钟同步 步骤: 1、输入date命令可以查看当前系统时间,可以看到此时系统时间为PDT(部分机器或许为EST),并非中国标准时间。我们在中国地区…...
基于YOLO11/WVP的电梯系统开发-模型训练与rk3568移植
1. 环境准备 代码下载: https://github.com/ultralytics/ultralytics.git切换到 8.3.0 以上的分支,yolov11 只在上述分支支持, 下载后在 ultralytics 根目录下安装 yolo 依赖环境: pip install -e . -i https://pypi.tuna.tsinghua.edu.cn…...
[数据结构]并查集(系统整理版)
基础用法 int p[N];//路径压缩 寻找祖宗节点 int find(int x){if(p[x]!x) p[x]find(p[x]);return p[x]; }int main(){ //初始化for(int i1;i<n;i) p[i]i; }合并 void merge(int a,int b){int aafind(a),bbfind(bb);if(aa!bb){p[aa]bb;} }查询是否联通 bool is_connected(…...