非结构化数据解析利器:unstructured库从原理到RAG应用实战

news2026/5/3 9:33:10
1. 项目概述从混乱到有序解锁非结构化数据的宝藏如果你处理过任何形式的数字文档比如PDF报告、Word合同、Excel表格、网页文章甚至是电子邮件和图片里的文字那你一定对“非结构化数据”这个词不陌生。这些数据不像数据库里的表格那样规规矩矩它们没有固定的格式内容混杂机器很难直接理解和处理。想象一下你手头有1000份不同格式的年度报告老板让你快速汇总出所有公司的营收数据手动打开每一份文件复制粘贴这简直是场噩梦。而unstructured-IO/unstructured这个开源项目就是专门为解决这类噩梦而生的。简单来说unstructured是一个功能强大的Python库它的核心使命是“解析一切”。它能将五花八门的非结构化文档PDF、DOCX、PPTX、HTML、图片、电子邮件等转换成一种统一、结构化、易于机器处理的格式。这个项目背后的团队unstructured-IO专注于构建企业级的数据提取管道而unstructured库正是这个生态的基石。它不是一个简单的文本提取工具而是一个集成了光学字符识别OCR、文档布局分析、元素分类、分块策略等高级功能的“瑞士军刀”。无论你是数据分析师、AI工程师、知识库构建者还是任何需要从文档中自动化提取信息的人unstructured都能显著提升你的工作效率把杂乱无章的文档“原材料”变成可以直接喂给下游应用如大语言模型、搜索引擎、数据库的“精加工数据”。2. 核心设计哲学与架构拆解2.1 为什么需要统一的文档解析层在unstructured出现之前处理多格式文档通常意味着要集成和维护一堆不同的库用PyPDF2或pdfplumber处理PDF用python-docx处理Word用BeautifulSoup处理HTML用pytesseract处理图片OCR。每个库的API、输出格式、错误处理方式都不同代码会迅速变得臃肿且难以维护。更棘手的是这些库大多只提供原始文本丢失了文档中至关重要的结构信息和元数据。例如一份PDF报告中的标题、正文、表格、页眉页脚、项目符号列表在简单的文本提取后可能就混成了一团你无法区分哪段是章节标题哪个数字属于表格的特定行列。unstructured的设计哲学正是要解决这两个痛点统一接口和保留结构。它提供了一个简洁的partition函数无论输入是什么格式都试图输出一个标准化的元素列表其中每个元素都带有类型如Title,NarrativeText,Table,ListItem、文本内容以及位置、置信度等元数据。2.2 模块化与可扩展的管道设计unstructured的架构非常清晰采用了管道Pipeline模式将文档解析过程分解为一系列可插拔的步骤。这种设计带来了极大的灵活性输入适配器负责读取不同来源和格式的原始数据如本地文件、网络URL、二进制流等。文档转换器这是核心针对不同格式调用相应的底层解析器如pikepdf用于PDFdocx库用于DOCX。文档分割器将原始文本流按照语义或布局切割成更小的、有意义的“块”Chunks。这是为后续检索增强生成RAG等应用做准备的关键步骤。元素后处理器对提取出的元素进行清洗、合并、分类或丰富元数据。例如将相邻的、字体样式相同的文本块合并为一个段落识别并标注出“地址”、“日期”等实体。输出序列化器将处理后的元素列表转换成目标格式如JSON、CSV或直接输出为LangChain、LlamaIndex等框架兼容的文档对象。这种模块化设计意味着你可以轻松定制管道。比如对于扫描版PDF你可以配置管道先使用高精度的OCR引擎如tesseract再进行布局分析对于纯文本文件则可以跳过OCR步骤以提升速度。注意虽然unstructured集成了OCR功能通过unstructured.pytesseract模块但对于生产环境下的复杂扫描文档你可能需要评估更专业的云OCR服务如Azure Form Recognizer、Amazon Textract的精度和成本unstructured的良好设计允许你将这些服务作为自定义的“分割器”或“后处理器”集成进来。3. 核心功能深度解析与实操要点3.1partition函数一统江湖的入口一切始于partition函数。它的基本用法简单到令人发指from unstructured.partition.auto import partition elements partition(filenameexample.pdf) for element in elements: print(f{element.category}: {element.text[:100]}...)这行代码背后unstructured会根据文件扩展名自动选择最合适的解析器。partition函数支持数十种参数用于精细控制解析行为这也是其强大之处。以下是一些关键参数解析strategy 这是最重要的参数之一尤其对于PDF。可选值有hi_res、ocr_only、fast。fast 速度最快仅提取PDF中的嵌入式文本。适用于数字生成的PDF如Word另存为的PDF但无法处理扫描件且会丢失大部分布局信息。ocr_only 假设PDF是图片直接对整个页面进行OCR。适用于纯扫描件但会忽略任何可能存在的文本层和布局。hi_res默认且推荐策略。它首先尝试提取嵌入式文本和布局如果检测到页面可能是图像则在该区域调用OCR。这是精度和速度的较好平衡。include_page_breaks 设置为True时会在输出元素中插入PageBreak类别的元素这对于需要保留页码信息的应用如法律文档引用至关重要。chunking_strategy 定义如何将大文档分块。内置策略如by_title可以根据标题层级进行智能分块这对于构建RAG应用时保持上下文完整性非常有用。languages 指定OCR或文本分析的语言如[eng, chi_sim]表示英语和简体中文。正确设置能大幅提升非英语文档的解析精度。实操心得对于未知来源的PDF我通常先用strategyfast快速试一下如果返回的文本很少或为空再切换到strategyhi_res。在生产流水线中可以根据文件元数据如创建软件或简单启发式规则如文件大小与页数的比例来动态选择策略以优化整体处理时间。3.2 元素模型结构化输出的基石partition返回的是一个List[Element]。Element是一个基类不同类型的具体元素如CompositeElement,Table,CheckBox继承自它。每个元素都有一些核心属性type/category: 元素类型如Title,NarrativeText,UncategorizedText,Image,Table,ListItem等。text: 元素的主要文本内容。metadata: 一个丰富的字典包含来源信息如filename,page_number、布局信息如coordinates坐标边界框、检测置信度等。id: 元素的唯一标识符。理解这些元素类型是进行后续处理的关键。例如你可以轻松地过滤出所有Table元素进行单独处理或者将所有Title元素提取出来生成文档大纲。# 提取所有表格 tables [el for el in elements if el.category Table] for i, table in enumerate(tables): # unstructured 通常将表格转换为HTML格式的字符串 print(fTable {i1} HTML:\n{table.text}\n) # 你也可以用 pandas 进一步处理 # import pandas as pd # df pd.read_html(table.text)[0]3.3 分块策略详解为RAG应用量身定制直接将长达百页的文档全文扔给大语言模型LLM通常不可行因为会超出上下文窗口限制且包含大量无关信息。因此我们需要“分块”。unstructured提供了强大的chunking模块。为什么分块不是简单的按字符数切割因为粗暴地按固定字符数切割会破坏句子、段落甚至表格的完整性导致语义碎片化严重影响RAG检索的质量。一个被从中间切断的句子其嵌入向量可能无法准确代表任何完整语义。unstructured的分块是在元素级别进行的。它提供了多种策略ByTitleChunking: 这是最常用的语义分块策略。它利用检测到的标题Title元素作为自然边界。你可以设置max_characters块的最大字符数、combine_text_under_n_chars将短于N字符的文本块与上一个块合并等参数。它会沿着标题层级结构在不超过大小限制的前提下将标题下的叙述性文本组合在一起。BasicChunking: 简单的按元素顺序合并直到达到大小限制。比按字符切割稍好但可能不如ByTitleChunking符合阅读逻辑。ByPageChunking: 按原始文档的页进行分块。适用于页面本身就是强语义边界的情况如每页一个独立案例。配置示例from unstructured.chunking.title import chunk_by_title from unstructured.documents.elements import Title, NarrativeText # 假设 elements 是 partition 得到的元素列表 chunks chunk_by_title( elementselements, max_characters1500, # 每个块约1500字符 combine_text_under_n_chars500, # 将少于500字符的小段文本合并到上一个块 new_after_n_chars2000, # 单个元素超过2000字符则强制拆分 ) for chunk in chunks: print(fChunk ID: {chunk.id}) print(fText Preview: {chunk.text[:200]}...\n)注意事项分块参数的设置如max_characters需要根据你使用的LLM的上下文窗口和嵌入模型的特点进行调优。块太小会丢失上下文块太大会降低检索精度并增加LLM处理成本。通常对于通用文本800-2000字符是一个常见的范围需要在实际的RAG流水线中进行A/B测试来确定最佳值。4. 实战全流程构建一个多格式文档信息提取流水线让我们设想一个真实场景你所在的公司有一个共享文件夹里面堆满了历史项目文档包括PDF报告、Word方案、PPT演示稿和HTML产品页面。你的任务是构建一个自动化流水线提取所有文档的文本内容、关键元数据标题、作者、日期以及所有表格数据并存储到向量数据库中以供后续问答机器人使用。4.1 步骤一环境搭建与依赖管理首先unstructured的功能依赖较多特别是OCR和某些文档格式支持。官方推荐使用pip install并指定额外依赖组。# 基础安装支持纯文本、HTML、XML、电子邮件等 pip install unstructured[md,html,docx,xlsx,pptx,email] # 如果需要处理PDF强烈建议安装PDF相关依赖 pip install unstructured[pdf] # 如果需要OCR功能处理扫描件或图片中的文字安装OCR依赖 pip install unstructured[pdf,ocr] # 注意这会自动安装 pytesseract但你仍需在系统层面安装 Tesseract-OCR 引擎。 # Ubuntu/Debian: sudo apt-get install tesseract-ocr # macOS: brew install tesseract # Windows: 下载安装包并配置环境变量。对于生产环境我强烈建议使用Docker。unstructured提供了功能齐全的预构建镜像包含了所有依赖包括Tesseract和各种语言包能避免“在我机器上是好的”这类问题。# 使用官方镜像 docker run -p 8000:8000 downloads.unstructured.io/unstructured-io/unstructured-api:latest --port 8000 --host 0.0.0.0你也可以通过其REST API来调用服务这对于微服务架构非常友好。4.2 步骤二编写健壮的文档解析脚本我们不能假设所有文件都是完美的。脚本需要处理多种格式、损坏文件、编码问题以及网络超时如果从URL读取。import os from pathlib import Path from typing import List, Optional import traceback from unstructured.partition.auto import partition from unstructured.chunking.title import chunk_by_title import json class DocumentProcessor: def __init__(self, output_dir: str ./processed_output): self.output_dir Path(output_dir) self.output_dir.mkdir(parentsTrue, exist_okTrue) def process_file(self, file_path: Path) - Optional[dict]: 处理单个文件返回结果字典失败则返回None并记录日志 result { filename: file_path.name, filepath: str(file_path), success: False, elements: [], chunks: [], metadata: {}, error: None } try: # 1. 分区解析 # 根据文件类型微调参数 kwargs {strategy: hi_res, include_page_breaks: True} if file_path.suffix.lower() in [.png, .jpg, .jpeg, .tiff]: kwargs[strategy] ocr_only kwargs[languages] [eng, chi_sim] # 中英文OCR elements partition(filenamestr(file_path), **kwargs) result[elements] [el.to_dict() for el in elements] # 2. 提取文档级元数据从第一个元素的metadata中获取通用信息 if elements: first_meta elements[0].metadata.to_dict() result[metadata].update({ page_count: first_meta.get(page_number, 1), # 注意这可能是最后一页的页码 languages: first_meta.get(languages, []), }) # 3. 智能分块为RAG准备 chunks chunk_by_title( elementselements, max_characters1500, combine_text_under_n_chars300, new_after_n_chars2000, ) result[chunks] [ { id: chunk.id, text: chunk.text, metadata: chunk.metadata.to_dict() # 包含来源文件名和页码 } for chunk in chunks ] result[success] True except Exception as e: result[error] str(e) print(f处理失败 {file_path}: {e}) traceback.print_exc() return result def process_directory(self, input_dir: str, recursive: bool True): 批量处理目录下的所有支持的文件 input_path Path(input_dir) file_extensions [.pdf, .docx, .pptx, .html, .txt, .png, .jpg, .jpeg, .msg] # 支持的类型 files [] if recursive: for ext in file_extensions: files.extend(input_path.rglob(f*{ext})) else: for ext in file_extensions: files.extend(input_path.glob(f*{ext})) all_results [] for file in files: print(f正在处理: {file}) result self.process_file(file) if result and result[success]: # 保存每个文件的详细结果JSON格式 output_file self.output_dir / f{file.stem}_processed.json with open(output_file, w, encodingutf-8) as f: json.dump(result, f, ensure_asciiFalse, indent2) # 也可以只保存纯净的文本块用于后续嵌入 chunks_file self.output_dir / f{file.stem}_chunks.json with open(chunks_file, w, encodingutf-8) as f: json.dump(result[chunks], f, ensure_asciiFalse, indent2) all_results.append(result) # 生成处理摘要报告 self._generate_summary(all_results) return all_results def _generate_summary(self, results: List[dict]): # ... 生成成功/失败统计总页数总块数等报告 ... pass # 使用示例 if __name__ __main__: processor DocumentProcessor(output_dir./data/processed) results processor.process_directory(/path/to/your/docs_folder, recursiveTrue)这个脚本展示了几个关键点异常处理用try...except包裹核心逻辑避免单个文件失败导致整个流程中断。参数动态调整根据文件后缀名如图片调整partition策略。结果持久化将原始元素和分块后的数据分别保存为JSON便于调试和下游使用。批量处理支持递归遍历目录。4.3 步骤三与下游向量数据库集成得到结构化的chunks后下一步就是将其转换为向量并存入数据库如Chroma、Weaviate、Pinecone。unstructured的输出与LangChain、LlamaIndex等框架天然兼容。以LangChain为例from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings from langchain.schema import Document as LangchainDocument import json # 1. 加载我们之前保存的 chunks chunks_data [] with open(./data/processed/project_report_chunks.json, r, encodingutf-8) as f: chunks_data json.load(f) # 2. 转换为 LangChain Document 对象 langchain_docs [] for chunk in chunks_data: doc LangchainDocument( page_contentchunk[text], metadatachunk[metadata] # 保留文件名、页码等元数据 ) langchain_docs.append(doc) # 3. 虽然我们已经用 unstructured 分过块但有时可能还需要用 LangChain 的 splitter 做二次精细分割 # 这里我们直接使用 unstructured 的分块结果 text_splitter RecursiveCharacterTextSplitter( chunk_size1000, # 可以设置得比 unstructured 的块小一些做重叠分割 chunk_overlap200, separators[\n\n, \n, 。, , , , ] # 中文友好分隔符 ) # 如果觉得 unstructured 的块已经合适可以跳过这步 # final_docs text_splitter.split_documents(langchain_docs) final_docs langchain_docs # 4. 创建向量存储 embeddings OpenAIEmbeddings(modeltext-embedding-3-small) # 或其他嵌入模型 vectorstore Chroma.from_documents( documentsfinal_docs, embeddingembeddings, persist_directory./chroma_db # 本地持久化 ) # 现在 vectorstore 就可以用于相似性检索了关键集成点unstructured生成的chunks已经自带了丰富的metadata如filename,page_number。在存入向量数据库时务必保留这些元数据。这样当RAG系统检索到一个相关块时你不仅能得到文本还能立刻知道它来自哪个文件的哪一页这对于生成可信的、可追溯的答案至关重要。5. 常见问题排查与性能优化实录在实际使用中你肯定会遇到各种问题。以下是我在多个项目中总结的“避坑指南”。5.1 解析质量不理想问题现象可能原因排查与解决方案PDF文字提取不全或乱码1. PDF是扫描件没有文本层。2. 使用了特殊或嵌入的字体。3. PDF本身已损坏或加密。1.首要检查用strategyhi_res或strategyocr_only。2. 尝试用其他工具如Adobe Reader打开看是否能正常复制文字。如果不能基本确定是扫描件。3. 对于加密PDF需要先解密。unstructured目前不支持密码解密需用pikepdf等库先处理。4. 对于复杂排版可以尝试调整infer_table_structure参数或使用专门的表格提取模型需额外配置。表格提取为乱码文本解析器未能正确识别表格区域将其当作普通文本流处理。1. 确保使用了支持表格检测的解析器如partition的strategyhi_res默认会尝试。2. 检查输出元素中是否有category为Table的元素。如果没有说明表格检测失败。3. 考虑使用unstructured的unstructured.documents.html分区器先处理HTML或尝试专门的表格提取库如camelot、tabula-py作为后备方案。中英文混合文档OCR效果差Tesseract默认语言包可能未包含中文或未正确配置多语言。1. 安装多语言Tesseract数据包如tesseract-ocr-chi-sim。2. 在partition函数中明确指定languages[eng, chi_sim]。3. 对于重要项目评估商用OCR API它们在中英文混合、复杂背景下的识别率通常更高。分块结果不符合预期标题检测不准导致ByTitleChunking分块边界错误。1. 先检查原始elements中的Title元素是否被正确识别。可能文档的标题并非通过字体大小而是通过其他样式定义。2. 可以尝试使用ByPageChunking或BasicChunking作为备选。3. 自定义分块逻辑根据elements的category和metadata.coordinates等信息编写自己的分块函数。5.2 性能瓶颈与优化处理大量或超大文档时性能至关重要。并行处理unstructured的partition本身是单线程的。但你可以很容易地用Python的concurrent.futures或多进程库multiprocessing来并行处理多个文件。注意OCRTesseract操作通常是CPU密集型并行化能带来线性提升但要注意内存消耗。from concurrent.futures import ProcessPoolExecutor, as_completed def process_single_file(file_path): # ... 调用上面的 process_file 逻辑 ... return result with ProcessPoolExecutor(max_workersos.cpu_count()) as executor: future_to_file {executor.submit(process_single_file, fp): fp for fp in file_list} for future in as_completed(future_to_file): file_path future_to_file[future] try: result future.result() # 处理结果 except Exception as exc: print(f{file_path} generated an exception: {exc})缓存中间结果如果同一份文档需要被多次处理例如尝试不同分块参数可以将partition得到的原始elements序列化如用pickle保存到磁盘。后续处理直接从elements开始跳过耗时的文档解析和OCR步骤。选择性使用OCRstrategyhi_res会对疑似图片的区域进行OCR这比fast慢很多。建立文件预处理流程通过文件属性如Producer元字段是扫描仪软件或简单规则文件尺寸巨大但页数少预先判断是否为扫描件从而动态选择策略。使用API服务对于超大规模或需要高可用性的场景部署unstructured的Docker容器作为API服务并通过负载均衡器横向扩展。这样可以集中管理依赖、资源并方便客户端调用。5.3 内存与依赖管理unstructured的依赖特别是pytesseract和popplerPDF渲染可能在某些系统上存在冲突。Docker是最佳的隔离方案。如果必须在本地管理建议使用conda或venv创建独立的虚拟环境并严格按照官方文档的安装顺序进行操作。处理特大PDF时如数百页的工程图纸hi_res策略可能会消耗大量内存需要监控进程内存使用情况必要时对文档进行预分割如按章节拆分成小文件。最后unstructured社区活跃更新迅速。遇到问题时查阅其 GitHub Issues 和官方文档通常是最高效的解决途径。这个项目正在快速演进不断加入对新格式的支持和更智能的解析算法将其作为你非结构化数据处理流水线的核心组件是一个面向未来的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…