基于知识图谱与NLP技术的小说文本结构化分析实战

news2026/5/16 8:06:18
1. 项目概述当小说遇见知识图谱如果你和我一样既是个技术爱好者又是个小说迷那你肯定有过这样的体验读完一本情节复杂、人物关系盘根错节的小说后合上书页脑子里却一团乱麻。谁是谁的盟友那个关键道具在第三章出现后又在第几章发挥了作用主角的成长线到底经历了哪几个关键转折传统的线性阅读和大脑记忆在处理这种高密度的叙事信息时常常显得力不从心。这就是Anshler/graphify-novel这个项目吸引我的地方。它不是一个简单的文本分析工具而是一个旨在将非结构化的、线性的小说文本转化为结构化的、可视化的知识图谱的引擎。简单来说它试图回答一个问题我们能否用“图”的思维来重新“阅读”和理解一部小说知识图谱Knowledge Graph这个概念在搜索引擎和智能问答领域已经耳熟能详它用“实体-关系-实体”的三元组形式来组织世界知识。graphify-novel所做的就是将这套方法论应用在文学领域。它通过自然语言处理技术自动地从小说文本中抽取出人物、地点、组织、关键物品等实体并识别出他们之间的社交关系、空间移动、事件关联最终构建出一个属于这部小说的、独一无二的知识网络。这个项目的核心价值在于它为文学分析、内容创作、乃至读者理解提供了一个全新的、数据驱动的视角。对于研究者可以量化分析人物关系网络的密度与演变对于作者可以回溯检查自己构建的叙事逻辑是否自洽对于普通读者一张清晰的关系图可能就是解开复杂剧情谜题的那把钥匙。接下来我将深入拆解这个项目的实现思路、技术细节以及我在复现和拓展过程中的实战经验。2. 核心思路与技术选型解析2.1 从文本到图谱的完整Pipeline设计graphify-novel的核心工作流是一个标准的自然语言处理流水线但其每个环节都针对小说这一特定领域进行了定制化设计。一个健壮的Pipeline通常包含以下关键步骤文本预处理与分句这是所有NLP任务的基础。小说文本可能包含大量对话引号、特殊符号、章节标题等。预处理需要清洗无关字符并按照句号、问号、感叹号等有效标点进行智能分句。这里的一个关键考量是是否将对话单独拆分因为对话中往往包含高密度的人物关系和情感信息。命名实体识别这是构建图谱的基石。我们需要从句子中识别出属于我们关心类别的实体如人物(PER)、地点(LOC)、组织(ORG)、物品(OBJECT)等。通用NER模型如BERT、SpaCy虽然强大但在小说领域可能对虚构人名、地名识别不佳。因此项目很可能采用或需要微调一个在文学语料上训练过的NER模型或者结合基于规则的词典如预先输入的主要角色名来提升召回率。关系抽取这是最具挑战性的一环。我们需要判断同一句子或相邻上下文中两个实体之间存在何种关系。例如“张三和李四在咖啡馆争吵”中“张三”和“李四”之间存在“争吵”的社交关系“张三”和“咖啡馆”之间存在“位于”的空间关系。关系抽取可以是预定义类型的分类如亲属、敌对、位于也可以是开放式的短语抽取。考虑到性能与准确率的平衡采用基于预训练模型如BERT的序列标注或句子对分类方法是当前的主流选择。共现分析与关系强化单纯基于句子的关系抽取可能稀疏且不完整。因此引入“共现分析”作为补充和强化手段至关重要。如果两个实体如“哈利·波特”和“赫敏·格兰杰”在整个章节或全书范围内频繁在相近的段落中出现即使没有明确的动词描述关系我们也可以为它们赋予一种“相关”或“高频互动”的弱关系并设置一个“共现强度”的权重属性。图谱构建与存储将抽取出的(头实体关系尾实体)三元组存储到图数据库中。Neo4j是最自然的选择因为它使用原生图存储并且查询语言Cypher非常直观适合做“朋友的朋友”、“人物的活动轨迹”这类多层关系查询。当然如果追求轻量级也可以使用NetworkX在内存中构建图并进行可视化分析。可视化与交互最终目的是生成一张可读性强的图谱。D3.js、PyVis、Gephi等都是优秀的可视化工具。它们需要接收图数据库或NetworkX图对象的数据并根据实体类型、关系强度、节点度中心性等属性进行自动布局和渲染允许用户点击、缩放、筛选。注意这个Pipeline不是单向的。在实践中我们常常需要从可视化结果回溯检查哪些关系抽取错了哪些实体识别漏了然后反过来调整NER或关系抽取模型的参数、增加规则形成一个迭代优化的闭环。2.2 关键技术组件选型背后的考量为什么选择这些技术每一个选择背后都有对小说文本特性的思考。编程语言Python几乎是NLP领域的标准语言拥有极其丰富的库生态SpaCy, NLTK, Transformers, Stanza便于快速实现从预处理到模型部署的整个流程。核心NLP模型预训练Transformer如BERT及其变体为什么是BERTBERT通过在大规模语料上的预训练深度理解了语言的上下文语义。这对于小说文本至关重要因为代词指代“他”、“她”、“它”、省略和复杂句式非常普遍。BERT能够更好地理解“艾莉亚”和“她”指的是同一个人。微调是关键直接使用通用BERT进行小说实体和关系抽取效果可能一般。理想的做法是收集或标注一部分小说文本如公开的经典名著电子版对BERT模型进行下游任务的微调。例如用标注了人物、地点的小说句子微调NER模型用标注了关系如攻击、赠与、爱慕的句子对微调关系分类模型。图数据库Neo4j vs 内存图NetworkXNeo4j优势在于持久化存储、处理超大规模图数十万节点关系能力强、支持复杂的图遍历查询。如果你的目标是分析整部《战争与和平》或构建一个系列小说的图谱库Neo4j是专业之选。NetworkX纯Python库轻量、灵活与Python数据分析栈Pandas, Matplotlib无缝集成。适合单本小说、快速原型验证、以及不需要持久化复杂查询的场景。它生成的图对象可以直接传给PyVis做交互可视化。我的选择建议对于探索和实验先用NetworkX。它让你快速看到结果验证流程。当数据量变大、分析需求变复杂时再迁移到Neo4j。可视化PyVis的便捷性PyVis是一个基于Python的交互式网络可视化库后端实际上是生成HTML/JavaScript。它的API非常简单几行代码就能生成一个支持拖拽、缩放、点击查看详情、按物理模型力导向布局的网页图。对于分享和演示来说一个独立的HTML文件比配置一个复杂的Web服务要方便得多。3. 实战复现构建《三国演义》人物关系图谱理论说得再多不如动手做一遍。我选择《三国演义》作为目标文本因为它人物众多、关系复杂是检验graphify-novel这类工具的绝佳试金石。3.1 环境准备与数据获取首先搭建一个干净的Python环境并安装核心依赖。我强烈建议使用conda或venv创建虚拟环境。# 创建并激活虚拟环境 conda create -n novel-graph python3.9 conda activate novel-graph # 安装核心库 pip install spacy transformers networkx pyvis pandas python -m spacy download zh_core_web_sm # 下载中文模型对于《三国演义》的文本可以从古登堡计划等公开领域获取一个干净的UTF-8编码的txt版本。确保文本已经去除版权声明、前言后记等无关内容只保留小说正文。3.2 文本预处理与分句的精细化处理中文小说的分句比英文复杂因为句号“。”并非唯一的分句标志还需要考虑感叹号“”、问号“”、分号“”以及引号“”的配对情况。我使用了spacy的中文模型进行分句并结合自定义规则处理对话。import spacy import re nlp spacy.load(‘zh_core_web_sm’) def preprocess_and_sentence_split(text): # 1. 基础清洗去除多余空格、换行将全角字符统一 text re.sub(r\s, , text) text text.replace(\n, ).replace(\r, ) # 2. 使用spacy进行分句它考虑了中文标点 doc nlp(text) sentences [sent.text.strip() for sent in doc.sents if len(sent.text.strip()) 5] # 过滤过短句子 # 3. 处理对话将“XXX道“...””这样的句子尝试拆分为“XXX道”和“...”两部分因为对话内容包含重要关系。 refined_sents [] for sent in sentences: # 简单匹配对话模式 match re.match(r^(.[道说问喝骂曰])“(.)”$, sent) if match: refined_sents.append(match.group(1) “) # 保留说话人部分 refined_sents.append(match.group(2)) # 对话内容单独成句 else: refined_sents.append(sent) return refined_sents with open(sanguo.txt, r, encodingutf-8) as f: raw_text f.read() sentences preprocess_and_sentence_split(raw_text[:50000]) # 先处理前5万字进行试验 print(f共得到 {len(sentences)} 个句子。)实操心得预处理没有“银弹”。对于不同的文本源现代小说、翻译小说、古典小说清洗规则需要调整。最好的方法是预处理后随机采样100个句子人工检查根据问题迭代规则。比如《三国演义》中“操曰”、“玄德曰”非常频繁针对性地优化对话拆分能极大提升后续关系抽取的准确性。3.3 实体识别结合模型与规则提升准确率单纯使用spacy的通用中文NER模型对于“曹操”、“诸葛亮”这类常见历史人物识别尚可但对“程普”、“韩当”等次要人物或“赤壁”、“荆州”等地名识别率就不够理想。我的策略是**“模型为主规则为辅人工核验核心实体”**。构建核心实体词典我从维基百科或相关资料中整理出《三国演义》中前100位重要人物的名单如刘备,关羽,张飞,曹操,孙权,周瑜...以及主要地名、势力名。使用模型进行初步识别def extract_entities_with_spacy(sentences): entities [] for sent in sentences: doc nlp(sent) for ent in doc.ents: # spacy中文模型标签PERSON, ORG, GPE, LOC, etc. if ent.label_ in [‘PERSON’, ‘ORG’, ‘GPE’, ‘LOC’]: entities.append({ ‘text’: ent.text, ‘label’: ent.label_, ‘sentence’: sent }) return entities规则匹配进行补充对于模型未识别但出现在我核心词典中的词在句子中进行精确匹配并赋予相应的标签。实体归一化这是关键一步“玄德”、“刘玄德”、“刘备”、“皇叔”可能指向同一个人。我们需要建立一个别名映射表。例如{“刘备”: [“玄德”, “刘玄德”, “皇叔”, “先主”], “曹操”: [“孟德”, “曹孟德”, “丞相”, “魏王”]}。在存储实体时统一存储为标准名并在节点属性中记录所有出现的别名。alias_map { “刘备”: [“玄德”, “刘玄德”, “皇叔”, “先主”], “关羽”: [“云长”, “关云长”, “关公”, “美髯公”], “曹操”: [“孟德”, “曹孟德”, “丞相”, “阿瞒”, “魏王”], # ... 更多映射 } def normalize_entity(entity_text, alias_map): for std_name, aliases in alias_map.items(): if entity_text std_name or entity_text in aliases: return std_name # 如果未找到映射则返回原文本后续可能需要人工审核加入映射 return entity_text3.4 关系抽取基于依存句法与规则模板完全端到端的关系抽取模型对标注数据要求高。在项目初期采用基于依存句法分析的模式匹配规则模板是一个快速启动且可解释性强的方案。思路是分析句子的语法结构找到连接两个实体的核心动词或介词。def extract_relations_by_pattern(sentence, entities_in_sent): 基于简单规则抽取关系。 entities_in_sent: 本句中识别出的实体列表每个元素为(标准名, 标签) relations [] # 示例规则1: A 与/和 B 一起 [动词]... if ‘与’ in sentence or ‘和’ in sentence: # 简化处理实际应用需要更精细的句法分析 pass # 示例规则2: A 在 B [地点] ... # 示例规则3: A 是 B 的 [关系如父亲、手下] ... # 这里需要结合spacy的依存分析 (doc[i].dep_, doc[i].head) doc nlp(sentence) # 遍历句子中的每一个词token for token in doc: # 如果当前词是动词且是句子的核心ROOT或重要谓语 if token.pos_ ‘VERB’ and token.dep_ in (‘ROOT’, ‘advcl’): verb token.text # 寻找这个动词的主语和宾语 subjs [child for child in token.children if child.dep_ in (‘nsubj’, ‘nsubj:pass’)] objs [child for child in token.children if child.dep_ in (‘dobj’, ‘obj’, ‘nmod’)] # 将主语和宾语词与识别出的实体进行匹配需处理代词指代这里简化 # 如果匹配成功则形成一个 (主语实体, 动词, 宾语实体) 的候选关系 for subj in subjs: for obj in objs: subj_entity find_entity_by_token(subj, entities_in_sent) obj_entity find_entity_by_token(obj, entities_in_sent) if subj_entity and obj_entity: relations.append((subj_entity[0], verb, obj_entity[0])) return relations同时必须引入共现分析来补充稀疏的关系。如果“刘备”和“诸葛亮”在多个章节的多个句子中同时出现即使没有明确的动词描述我们也认为他们存在“密切关联”。from collections import defaultdict import itertools cooccurrence defaultdict(int) window_size 2 # 在同一段落或相邻的N个句子内出现即算共现 for i in range(len(sentences)): sent_entities set([e[0] for e in entities_per_sentence[i]]) # 获取本句实体标准名集合 # 检查当前句与后续窗口句子的实体共现 for j in range(i1, min(iwindow_size1, len(sentences))): next_sent_entities set([e[0] for e in entities_per_sentence[j]]) for e1 in sent_entities: for e2 in next_sent_entities: if e1 ! e2: pair tuple(sorted((e1, e2))) # 排序使(A,B)和(B,A)视为同一对 cooccurrence[pair] 1 # 将高频共现对如出现次数5也作为“相关”关系加入图谱权重设为共现次数 for (e1, e2), count in cooccurrence.items(): if count CO_OCCUR_THRESHOLD: relations.append((e1, ‘相关’, e2, {‘weight’: count, ‘type’: ‘cooccurrence’}))3.5 构建与可视化图谱有了实体和关系列表就可以用NetworkX构建图并用PyVis生成交互式可视化。import networkx as nx from pyvis.network import Network # 创建有向图 G nx.DiGraph() # 添加节点 all_entities set() for rel in relations: all_entities.add(rel[0]) all_entities.add(rel[2]) for entity in all_entities: G.add_node(entity, labelentity, titleentity, group‘PERSON’) # 实际应根据实体类型分组 # 添加边关系 for rel in relations: source, relation, target, *attrs rel # 假设rel是元组 (source, relation, target, attrs_dict) attr_dict attrs[0] if attrs else {} G.add_edge(source, target, titlerelation, labelrelation, **attr_dict) # 使用PyVis生成交互式网页 net Network(notebookTrue, height“750px”, width“100%”, bgcolor“#222222”, font_color“white”) net.from_nx(G) net.show_buttons(filter_[‘physics’]) # 显示控制按钮可以调整布局参数 net.show(“sanguo_relationship.html”)生成的HTML文件可以在浏览器中直接打开。你可以拖动节点鼠标悬停查看关系和属性使用力导向布局让关系密集的区域自动散开非常直观。4. 效果评估、问题排查与优化策略运行完流程打开可视化图谱你可能会遇到一些典型问题。以下是我在实战中遇到的坑和解决方案。4.1 常见问题速查表问题现象可能原因排查与解决思路图谱中节点过多过于杂乱1. 实体识别过于宽松将非实体词普通名词、动词识别为实体。2. 共现阈值设置过低引入了大量无关连接。1.检查NER结果随机抽查一批被识别为实体的词看是否合理。调整NER模型置信度阈值或增加后处理规则过滤如过滤单字实体、过滤常见非实体高频词。2.提高共现阈值将CO_OCCUR_THRESHOLD从3提高到5或10。核心人物关系缺失或错误1. 关系抽取规则未能覆盖该句式。2. 实体归一化失败导致“刘备”和“玄德”被当作两个人。3. 代词指代未解析“他”未能链接到正确实体。1.分析遗漏句子找到描述该关系的原文句子分析其句法结构补充或修改关系抽取规则模板。2.完善别名映射表这是古典小说分析的重中之重需要持续维护。3.引入指代消解这是一个高级话题。可以尝试使用spacy的coref组件或专门的中文指代消解工具但准确率需评估。一个简单启发式规则在当前段落或对话范围内最近的、性别匹配的PERSON实体可能是“他/她”的指代对象。关系标签单一全是“相关”过度依赖共现分析或基于规则的关系抽取未能提取出具体动词。1.优先发展基于动词的规则即使只能准确抽取少数几种明确关系如攻击、劝说、授予也比全部是“相关”更有价值。从高频动词开始构建规则库。2.对共现关系进行聚类标注如果“刘备”和“诸葛亮”共现的句子中高频动词是“拜访”、“请教”、“任用”可以自动或半自动地将“相关”标签细化为“君臣”或“咨询”。可视化布局混乱重叠严重PyVis的默认物理引擎参数不适合当前图的结构。1.调整物理引擎参数在生成的HTML界面中点击右上角齿轮调整Repulsion节点斥力、Spring Length弹簧长度、Spring Strength弹簧强度。通常增大斥力、增长弹簧长度可以让图更舒展。2.尝试不同布局算法PyVis也支持hierarchical层次布局对于有明确层级如组织机构图的图可能更清晰。处理长文本速度极慢1. 对全文每个句子都调用spacy的完整NLP管道包含分词、词性标注、句法分析等计算开销大。2. 共现分析是O(N^2)复杂度。1.管道优化如果只用NER可以禁用spacy的parser和tagger等不需要的组件nlp spacy.load(“zh_core_web_sm”, disable[“parser”, “tagger”])。但这样会影响关系抽取。2.分块处理与并行将小说按章节或固定字数分块利用Python的multiprocessing库并行处理各块最后合并结果。3.对共现分析进行采样或使用近似算法或只对高频实体进行全量共现计算。4.2 迭代优化从规则到模型的演进路径初始版本基于规则能快速产出可视化结果但精度和覆盖率天花板明显。一个可持续的优化路径是阶段一规则原型当前阶段。快速验证想法产出初步图谱发现核心问题和数据特性。阶段二数据标注。利用现有原型对抽取结果进行人工修正和标注。例如从图谱中找出错误或缺失的关系回溯到原文句子将其标注为正确的(实体1 关系 实体2)三元组。积累几百到几千条高质量标注数据。阶段三模型微调。使用标注数据微调一个预训练模型如BERT用于关系抽取。可以将任务形式化为一个句子分类问题给定一个句子和两个标注的实体判断他们之间是N种预定义关系中的哪一种还是“无关系”。阶段四主动学习与闭环。用微调后的模型处理新数据对其低置信度的预测结果进行人工审核和标注补充到训练集中再次微调模型形成“模型预测-人工校验-模型更新”的增强循环。5. 项目拓展与应用场景思考一个基础的graphify-novel实现之后它的潜力远不止于生成一张静态的关系图。我们可以从多个维度进行拓展挖掘更深层的价值。5.1 动态演进图谱让故事“动”起来小说的人物关系是随时间章节演进的。我们可以按章节或故事段落如“赤壁之战”、“六出祁山”来切割文本分别构建子图谱。然后可以对比分析比较不同章节的图谱看哪些关系消失了哪些新关系出现了哪些关系的强度共现频率发生了变化。这能直观展示剧情转折点。制作动态图使用如Plotly或专门的时间序列图工具将图谱的演变过程做成动画或可滑动时间轴的可视化直观展示人物关系网的动态变化。5.2 融入事件与情节线当前的图谱以实体为核心。我们可以进一步抽取事件如“桃园结义”、“火烧赤壁”、“七擒孟获”作为新的节点类型。事件与参与的人物、发生的地点相连。这样图谱就从“社交网络”升级为“叙事网络”。我们可以查询某个角色参与了哪些关键事件两个事件之间通过哪些人物或地点关联整个故事的情节主线是否在图上形成一条密集的连接路径事件抽取比关系抽取更难通常需要定义事件模板或采用更复杂的NLP模型如事件抽取模型。5.3 为创作与内容分析赋能辅助写作作者在创作复杂群像剧时可以用此工具维护一个“角色关系数据库”随时检查新加入的情节是否与已有关系设定冲突确保逻辑自洽。文学研究研究者可以定量分析不同作者、不同流派小说的“关系网络密度”、“主角中心性”、“社区结构”即小说中是否自然形成了几个派系为文学批评提供数据支撑。阅读辅助与内容推荐为网络小说平台提供插件为读者实时生成当前章节的人物关系图降低阅读门槛。或者基于图谱的相似性人物关系结构、叙事模式向读者推荐风格类似的小说。5.4 技术栈的深化选择当项目从原型走向生产时需要考虑后端服务化用FastAPI或Flask将整个Pipeline封装成REST API接受文本输入返回图谱数据或可视化HTML。前端专业化用React/VueD3.js或G6开发更专业、定制化更强的图分析前端支持复杂的筛选、聚合、路径发现、社区检测等分析功能。引入图机器学习利用PyTorch Geometric或DGL等库对构建的图谱进行节点嵌入如Node2Vec将人物表示为向量。然后就可以做“人物相似度计算”向量余弦相似度或者基于图谱结构进行链接预测预测潜在未写明的关系。构建graphify-novel的过程是一个典型的“NLP图计算可视化”的综合工程实践。它从一个有趣的想法出发贯穿了数据获取、预处理、模型应用、规则设计、系统构建、结果评估和迭代优化的完整生命周期。最大的收获不在于做出了一个多完美的工具而在于通过这个项目你被迫去深入思考语言、结构、知识表示之间的关联并亲手搭建起连接它们的桥梁。无论最终图谱的精度如何这种跨领域的思维和实践能力才是最有价值的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2617590.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…