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

HanLP 2.x 多任务模型实战:从安装到文本分析全流程

1. 为什么你需要HanLP 2.x的多任务模型如果你正在处理中文文本比如想从一堆新闻里自动提取关键信息或者给你的聊天机器人加上理解用户意图的能力那你很可能需要一套好用的自然语言处理NLP工具。几年前这类工具的门槛还挺高要么是配置复杂的Java老牌项目要么是英文工具对中文水土不服。HanLP的出现特别是它的2.x版本可以说给中文NLP开发者带来了一个“全家桶”式的解决方案。我自己在项目里用过不少NLP工具从早期的斯坦福CoreNLP到各种基于Python的库。说实话HanLP 2.x给我的感觉是“省心”。它最大的亮点就是把分词、词性标注、命名实体识别这些原本需要分开处理的任务打包成了一个多任务模型。想象一下以前你要分析一段文本得先调用分词模型把结果喂给词性标注模型再喂给实体识别模型代码写起来啰嗦数据在不同模型间传递也容易出错。现在呢你只需要加载一个模型输入原始句子它就能一口气给你吐出所有分析结果就像一条高效的流水线。这不仅仅是方便更意味着性能上的提升。多任务模型底层共享了同一个强大的神经网络比如ELECTRA、BERT一次前向传播就能计算出多个任务的标签比串行调用多个独立模型快得多尤其在你需要处理大量文本时这个优势非常明显。对于刚入门的新手来说你不用再纠结于各个模块的拼接和版本兼容可以更专注于你的业务逻辑。对于有经验的开发者它提供了丰富的预训练模型和灵活的流水线组装方式让你能在速度和精度之间找到最佳平衡点。所以无论你是想快速搭建一个文本分析原型还是需要在生产环境中部署一个稳定高效的中文NLP服务HanLP 2.x的多任务模型都是一个值得你投入时间学习的利器。接下来我就带你从零开始走一遍完整的实战流程。2. 避开坑点HanLP 2.x环境安装全指南安装HanLP 2.x听起来就是一句pip install的事但如果你直接上手很可能掉进依赖冲突的大坑里。我刚开始用的时候就被各种AttributeError和版本不兼容折腾得够呛。所以这部分我得多唠叨几句帮你把路铺平。2.1 核心安装命令与“完整版”的重要性最关键的安装命令是pip install hanlp[full]注意一定要加上[full]。官方文档可能会提到hanlp这个精简版包但那个版本缺失很多依赖和模型组件几乎一定会报错。hanlp[full]会帮你安装好所有核心依赖包括特定版本的TensorFlow和PyTorch。这是最稳妥、最推荐的方式。为什么依赖这么麻烦因为HanLP 2.x的底层是深度学习框架它封装了TensorFlow和PyTorch来运行那些预训练模型。这些框架版本迭代快不同版本间的API变动可能导致HanLP内部调用失败。因此HanLP锁定了它测试过能稳定工作的版本。你用pip install hanlp[full]它就会自动安装兼容的版本省去了你手动配环境的痛苦。2.2 隔离环境给你的HanLP一个“单间”这是我用血泪教训换来的最佳实践为HanLP创建一个独立的Python虚拟环境。 如果你的电脑上已经有一个用于其他机器学习项目比如用最新的PyTorch训练CV模型的环境强烈建议不要直接在里面安装HanLP。版本冲突几乎是必然的。创建隔离环境的方法很简单# 使用conda如果你安装了Anaconda或Miniconda conda create -n hanlp_env python3.8 conda activate hanlp_env # 或者使用venvPython自带 python -m venv hanlp_env # 在Windows上激活 hanlp_env\Scripts\activate # 在Mac/Linux上激活 source hanlp_env/bin/activate环境激活后你再执行pip install hanlp[full]。这样HanLP所需的TensorFlow/PyTorch版本就被隔离在这个小环境里不会影响你其他项目。项目做完conda deactivate或关闭终端即可退出非常干净。2.3 关于GPU有卡未必能用没卡也能运行很多朋友看到深度学习就想用GPU加速但在HanLP这里情况有点特殊。如果你没有NVIDIA显卡完全不用担心。HanLP提供的ELECTRA_SMALL等小型模型对CPU非常友好运行速度也很快。安装hanlp[full]时会自动安装CPU版本的PyTorch和TensorFlow。如果你有NVIDIA显卡想利用GPU加速就需要额外配置CUDA和cuDNN。这里有个大坑HanLP依赖的PyTorch/TensorFlow版本可能和你系统已安装的CUDA版本不匹配。最保险的做法是先不要在HanLP环境里手动安装PyTorch。就让pip install hanlp[full]装它需要的版本。安装完成后你可以尝试运行一个模型HanLP会自动尝试使用GPU。如果报错常见的是CUDA版本不兼容那么退而求其次在CPU上运行也完全没问题对于大多数文本分析任务速度是可接受的。我个人的经验是除非你要进行大规模的批量文本处理比如每天处理百万级文档否则CPU版本的ELECTRA_SMALL模型已经足够强大和高效。先把功能跑通再考虑优化是比较务实的路线。3. 初探多任务模型一键获取文本的全面洞察环境准备好了我们来点真格的。多任务模型是HanLP 2.x的精华咱们先看看怎么用最简单的代码获得最丰富的文本分析结果。3.1 加载你的第一个“全能”模型打开你的Python编辑器跟着我一起写import hanlp # 加载一个开源的多任务模型 # 这个模型名字很长但意思很明确能完成分词(tok)、词性标注(pos)、命名实体识别(ner)、 # 语义角色标注(srl)、依存句法分析(dep)、语义依存分析(sdp)、成分句法分析(con)等任务。 mtl hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH)第一次运行hanlp.load时它会从云端下载预训练好的模型文件。模型不大大约几百MB下载速度取决于你的网络。下载完成后模型文件会缓存在本地下次加载就瞬间完成了。这个CLOSE_..._SMALL_ZH模型是一个基于ELECTRA小型架构训练的中文多任务模型。“CLOSE”指的是它在一个相对封闭、质量较高的数据集上训练结果通常更精准一些。对于绝大多数中文文本分析场景它都是个不错的起点。3.2 执行分析与解读结果模型加载好了分析一句话试试texts [华为公司近日在深圳发布了全新的鸿蒙操作系统余承东出席了发布会。] results mtl(texts) print(results)你会得到一个结构复杂的字典。别慌我们把它拆开看tok(分词): 输出可能是[[华为, 公司, 近日, 在, 深圳, 发布, 了, 全新, 的, 鸿蒙, 操作系统, , 余承东, 出席, 了, 发布会, 。]]。它把句子切分成了一个个有意义的词语。pos(词性标注): 对应每个分词给出词性。比如华为(NR-专有名词)、发布(VV-动词)、全新(JJ-形容词)。ner(命名实体识别): 这是非常有用的一部分。它会识别出文本中的特定实体。对于上面的句子输出可能类似[[(华为公司, ORGANIZATION, 0, 2), (深圳, LOCATION, 4, 5), (余承东, PERSON, 12, 13)]]。这告诉我们“华为公司”被识别为组织机构“深圳”是地点“余承东”是人名。后面的数字是这些实体在分词列表中的起止索引。dep(依存句法分析): 这个稍微复杂点它描述词语之间的语法关系。比如“发布”是句子的核心根节点“华为公司”是发布动作的主语nsubj“操作系统”是发布的宾语dobj“在深圳”是发布的地点状语preppobj。你可能会想这么多信息一次性全给我我怎么用呢其实你可以指定只执行你关心的任务这样输出更简洁# 只做分词和实体识别 results mtl(texts, tasks[tok, ner]) print(results)这个功能非常实用。比如你只想做信息抽取那就只跑tok和ner如果你想分析句子语法结构就加上pos和dep。按需调用效率更高。4. 深入单任务当多任务模型不够用时多任务模型虽然方便但它毕竟是一个“通才”。在某些对特定任务精度要求极高的场景下或者你的任务组合比较特殊时“专家”型的单任务模型可能表现更好。HanLP 2.x提供了丰富的单任务模型库我们可以像搭积木一样使用它们。4.1 分词tok文本处理的第一步分词是中文NLP的基础。HanLP提供了不同粒度和不同训练集的分词模型。import hanlp # 查看所有分词模型 print(hanlp.pretrained.tok.ALL) # 加载一个细粒度分词模型切分更细 tok_fine hanlp.load(hanlp.pretrained.tok.FINE_ELECTRA_SMALL_ZH) # 加载一个粗粒度分词模型更倾向于成词 tok_coarse hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH) text [我爱北京天安门] print(细粒度:, tok_fine(text)) print(粗粒度:, tok_coarse(text))输出可能分别是[[我, 爱, 北京, 天安门]]和[[我, 爱, 北京天安门]]。对于“北京天安门”粗粒度模型将其视为一个整体名词而细粒度模型将其拆开。选择哪个取决于你的下游任务如果做实体识别粗粒度可能更好如果做句法分析细粒度可能更有帮助。加载自定义词典是分词时的常见需求。比如你的领域里有“云计算平台”、“异构计算”这样的专业术语不希望被拆开。tok hanlp.load(hanlp.pretrained.tok.COARSE_ELECTRA_SMALL_ZH) # 定义你的专业词典用集合set格式 custom_dict {云计算平台, 异构计算, 神经网络} # 使用“合并”模式加载词典推荐 tok.dict_combine custom_dict result tok([公司专注于云计算平台和异构计算的研究。]) print(result) # “云计算平台”和“异构计算”应该被作为一个词保留这里dict_combine模式会尊重模型的统计结果同时尽量合并词典中的词比强制模式dict_force更智能出错率更低。4.2 词性标注pos与命名实体识别ner理解词语的角色分词之后我们常常想知道每个词的词性名词、动词等并识别出其中的人名、地名、机构名等实体。# 加载PKU标准的词性标注模型 pos_pku hanlp.load(hanlp.pretrained.pos.PKU_POS_ELECTRA_SMALL) # 加载MSRA数据集训练的命名实体识别模型 ner_msra hanlp.load(hanlp.pretrained.ner.MSRA_NER_ELECTRA_SMALL_ZH) # 假设我们已经有了分词结果 words [[华为, 公司, 的, 余承东, 先生, 在, 北京, 发表, 了, 演讲]] pos_tags pos_pku(words[0]) # 输入是一个词语列表 print(词性:, pos_tags) # 例如[NR, NN, DEG, NR, NN, P, NR, VV, AS, NN] ner_entities ner_msra(words) print(实体:, ner_entities) # 例如[(华为公司, ORGANIZATION, 0, 2), (余承东, PERSON, 3, 4), (北京, LOCATION, 6, 7)]词性标注的结果是一串标签每个标签对应输入的一个词。PKU标准比较常用NR代表人名/专有名词NN代表普通名词VV是动词。命名实体识别的结果则是一个列表每个元素是一个元组包含了实体文本、实体类型和在序列中的位置。4.3 构建自定义流水线组装你的专属分析器单任务模型的强大之处在于可以自由组装。假设你觉得多任务模型里的依存句法分析精度不够想换一个更专业的单任务模型同时保留其他任务该怎么做import hanlp # 像搭积木一样构建流水线 my_pipeline hanlp.pipeline() \ .append(hanlp.utils.rules.split_sentence, output_keysentences) \ # 第一步分句 .append(hanlp.load(FINE_ELECTRA_SMALL_ZH), output_keytokens) \ # 第二步细粒度分词 .append(hanlp.load(CTB9_POS_ELECTRA_SMALL), output_keypos_tags, input_keytokens) \ # 第三步词性标注输入是上一步的tokens .append(hanlp.load(MSRA_NER_ELECTRA_SMALL_ZH), output_keyentities, input_keytokens) \ # 第四步实体识别 .append(hanlp.load(CTB9_DEP_ELECTRA_SMALL), output_keydependencies, input_keytokens) # 第五步依存分析 # 处理一段文本 document 中国科学院计算技术研究所成立于1956年。它是中国第一个计算机科学研究机构。 result my_pipeline(document) print(result)这个流水线清晰定义了处理流程先分句然后对每个句子依次进行分词、词性标注、实体识别和依存分析。input_key和output_key参数像管道一样把数据从一个组件传递到下一个。这种方式给了你极大的灵活性可以随时替换流水线中的任何一个模型或者调整处理顺序直到满足你的业务需求。它产生的输出格式和多任务模型类似是一个结构化的字典非常易于后续程序处理。5. 实战案例从原始文本到结构化信息光说不练假把式。我们来看一个完整的实战案例假设你有一批科技新闻的文本你的目标是自动提取出其中提到的公司名、产品名和技术名词并分析这些实体在句子中是作为主语还是宾语出现。5.1 定义任务与选择模型这个任务可以分解为分词与词性标注理解句子基本结构。命名实体识别找出我们关心的实体公司、产品、技术。HanLP的通用NER模型能识别人名PERSON、地名LOCATION、组织机构ORGANIZATION。对于“产品名”和“技术名词”通用模型可能识别不准我们需要用自定义词典来辅助。依存句法分析判断实体在句中的语法功能如主语nsubj宾语dobj。我们选择单任务流水线以便灵活插入自定义词典。import hanlp # 1. 构建流水线 pipeline hanlp.pipeline() \ .append(hanlp.utils.rules.split_sentence, output_keysentences) \ .append(hanlp.load(COARSE_ELECTRA_SMALL_ZH), output_keytokens) # 2. 加载自定义词典产品和技术术语 tech_entity_dict {鸿蒙操作系统, 昇腾芯片, MindSpore框架, 盘古大模型} pipeline.components[1].dict_combine tech_entity_dict # 将词典注入到分词组件 # 3. 继续添加后续任务 pipeline.append(hanlp.load(PKU_POS_ELECTRA_SMALL), output_keypos, input_keytokens) \ .append(hanlp.load(MSRA_NER_ELECTRA_SMALL_ZH), output_keyner, input_keytokens) \ .append(hanlp.load(CTB9_DEP_ELECTRA_SMALL, conllFalse), output_keydep, input_keytokens)5.2 编写信息提取逻辑现在我们写一个函数来解析流水线的输出提取我们需要的信息def extract_tech_info(sentence_tokens, pos_tags, ner_entities, dep_relations): 从分析结果中提取技术实体及其语法角色。 sentence_tokens: 分词列表如 [华为, 发布, 了, 鸿蒙操作系统] pos_tags: 词性列表如 [NR, VV, AS, NN] ner_entities: 实体列表如 [(华为, ORGANIZATION, 0, 1)] dep_relations: 依存关系列表每个元素是(父节点索引, 关系类型) info [] # 首先收集所有识别出的实体包括NER识别和自定义词典保留的 entity_spans [] for ent in ner_entities: entity_spans.append((ent[2], ent[3], ent[1])) # (开始索引, 结束索引, 类型) # 简单判断如果某个词是名词(NN/NR)且不在已知实体中可能是技术名词这里只是示例实际更复杂 for i, (token, pos) in enumerate(zip(sentence_tokens, pos_tags)): if pos in [NN, NR, NNP] and token in tech_entity_dict: entity_spans.append((i, i1, TECH)) # 分析每个实体的语法角色 for start, end, e_type in entity_spans: entity_text .join(sentence_tokens[start:end]) # 查找实体核心词这里取最后一个词的依存关系 head_idx end - 1 dep_rel dep_relations[head_idx] parent_idx, rel_type dep_rel # 根据关系类型判断角色 role 其他 if rel_type nsubj: role 主语 elif rel_type dobj: role 宾语 elif rel_type pobj: role 介词宾语 info.append({ 实体: entity_text, 类型: e_type, 角色: role, 在句中位置: f{start}-{end} }) return info # 测试文本 news 华为在开发者大会上正式发布了全新的鸿蒙操作系统并展示了基于昇腾芯片的AI解决方案。 result pipeline(news) for i, sent in enumerate(result[sentences]): tokens result[tokens][i] pos result[pos][i] ner result[ner][i] dep result[dep][i] extracted extract_tech_info(tokens, pos, ner, dep) print(f句子: {sent}) for item in extracted: if item[类型] in [ORGANIZATION, TECH]: # 只输出我们关心的类型 print(f - 提取到{item[类型]}{item[实体]} 在句中作为{item[角色]})这个案例展示了如何将HanLP的基础分析能力与简单的业务逻辑结合构建出一个具体的信息提取应用。你可以根据实际需求扩展extract_tech_info函数例如加入更复杂的实体类型判断规则或者分析实体间的修饰关系。6. 性能优化与生产环境部署建议当你的原型验证成功准备将HanLP应用到真实的生产环境时就需要考虑性能和稳定性了。6.1 模型选择与缓存策略模型大小与速度的权衡ELECTRA_SMALL模型通常在速度和精度上取得了很好的平衡是生产环境的默认推荐。如果你的服务器资源充足且对精度有极致要求可以尝试ELECTRA_BASE或ALBERT_BASE等更大模型但要注意它们会消耗更多内存和计算时间。模型缓存hanlp.load()在第一次加载时会下载模型。在生产服务器上你应该确保模型文件已经提前下载并放置在正确路径通常是~/.hanlp目录下避免服务启动时因网络问题失败。你可以通过设置环境变量HANLP_HOME来指定模型缓存目录。批量处理HanLP的模型设计支持批量输入。一次性传入一个句子列表比用for循环逐个处理要快得多因为能利用GPU/CPU的并行计算能力。# 低效的方式 results [] for sentence in large_corpus: results.append(mtl([sentence])) # 高效的方式 results mtl(large_corpus) # large_corpus是一个包含很多句子的列表6.2 处理长文本与错误处理长文本分割HanLP的模型通常有最大输入长度限制如512个token。处理长文档时务必先使用hanlp.utils.rules.split_sentence进行分句然后对句子进行批量处理。对于特别长的句子可能还需要进一步切割。健壮的错误处理在生产环境中输入文本是不可控的可能会有空字符串、乱码或极端特殊的符号。用try-except包裹你的处理代码是个好习惯。def safe_analyze(text, pipeline): if not text or not text.strip(): return None try: return pipeline(text) except Exception as e: print(f处理文本时出错: {text[:50]}... 错误: {e}) # 可以在这里记录日志并返回一个默认值或空结果 return {error: str(e)}6.3 封装为API服务对于线上服务通常会将HanLP封装成RESTful API。你可以使用轻量级的Web框架如FastAPI或Flask来实现。from fastapi import FastAPI, HTTPException import hanlp from pydantic import BaseModel from typing import List app FastAPI() # 在服务启动时加载模型避免每次请求都加载 mtl_model hanlp.load(hanlp.pretrained.mtl.CLOSE_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH) class TextRequest(BaseModel): texts: List[str] tasks: List[str] None # 可选指定任务 app.post(/analyze) async def analyze_text(request: TextRequest): try: result mtl_model(request.texts, tasksrequest.tasks) return {success: True, data: result} except Exception as e: raise HTTPException(status_code500, detailstr(e)) # 运行: uvicorn your_api:app --host 0.0.0.0 --port 8000这样其他应用就可以通过HTTP请求来调用你的NLP能力了。记得在API前端配置合适的超时时间和请求速率限制。从我自己的项目经验来看HanLP 2.x的多任务模型在中小型业务系统中表现非常稳定。它的主要优势在于开箱即用和功能全面。最大的挑战可能来自于对特定领域术语的识别精度这就需要我们巧妙地利用自定义词典和后续的规则逻辑来补充。总的来说把它作为中文文本处理的基础设施能帮你省下大量从头造轮子的时间。

相关文章:

HanLP 2.x 多任务模型实战:从安装到文本分析全流程

1. 为什么你需要HanLP 2.x的多任务模型? 如果你正在处理中文文本,比如想从一堆新闻里自动提取关键信息,或者给你的聊天机器人加上理解用户意图的能力,那你很可能需要一套好用的自然语言处理(NLP)工具。几年…...

LingJing(灵境)与外部虚拟机的网络穿透实战:从NAT困境到桥接畅通

1. 为什么你的反向Shell总是“失联”?从NAT困境说起 如果你和我一样,是个喜欢在本地搭建渗透测试环境的爱好者,那你肯定遇到过这个让人抓狂的场景:在LingJing(灵境)靶场里,靶机明明启动了&#…...

BEYOND REALITY Z-Image作品分享:自然光人像系列——晨光/正午/黄昏三种氛围呈现

BEYOND REALITY Z-Image作品分享:自然光人像系列——晨光/正午/黄昏三种氛围呈现 1. 引言:当光影遇见AI人像 你有没有想过,一张AI生成的人像照片,能有多真实? 不是那种一眼就能看出来的“AI感”,而是光影…...

告别“发光纸片人”:Substance 3D 与 Unity 2D URP 联动的次世代 2D 动态光照与法线手绘工作流

上周某日下午,一位担任核心技术美术的朋友,在微信上给我发了一段他们最新类银河恶魔城游戏的内部测试视频,并附带了一长串抓狂的语音。他们团队耗巨资请了顶级的二次元原画师,为游戏主角绘制了极其精美的立绘和 Spine 切片。可是&…...

人工智能混合编程实践:C++调用封装好的DLL进行PP-OCR字符识别

人工智能混合编程实践:C++调用封装好的DLL进行PP-OCR字符识别 前言 相关介绍 C++简介 ONNX简介 ONNX Runtime 简介 **核心特点** DLL 简介 **核心特点** **创建与使用** **应用场景** **优点与挑战** OCR字符识别简介 1. 核心工作原理 2. 技术演进 3. 主要应用场景 4. 当前面临…...

互联网大数据环境下 MySQL 迁移至国产底座的技术实践与路径观察

互联网大数据环境下 MySQL 迁移至国产底座的技术实践与路径观察 在当前互联网大数据应用持续深化的背景下,企业对关系型数据库的性能稳定性、安全合规性及运维可控性提出了更高要求。随着技术体系日趋成熟,金仓数据库(KingbaseES&#xff09…...

YOLOv8全网首发:CVPR2026 Transformer注意力 | BinaryAttention 1-bit注意力,推理提速100%,超越FlashAttention2

💡💡💡问题点:Transformer 已取得广泛而显著的成功,但其注意力模块的计算复杂性仍然是视觉任务的主要瓶颈。现有方法主要采用 8-bit 或 4-bit 量化来平衡效率与精度 💡💡💡措施:我们通过理论论证指出,注意力的二值化保留了基本的相似性关系,并提出了 BinaryAt…...

论文查重 / AI 率双杀攻略:Paperxie 四大降重方案实测,从 99.8% 到 14.9% 的通关密码

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippthttps://www.paperxie.cn/weight?type1https://www.paperxie.cn/weight?type1 前言:毕业季新噩梦 ——AI 率超标,比查重更让人崩溃的学术红线 当毕业论文终于写完&#xff…...

Highcharts React v4.2.1 正式发布:更自然的React开发体验,更清晰的数据处理

Highcharts React v4.2.1 版本正式发布了!这次更新不仅带来了错误修复和新功能,更重要的是对组件文档进行了全面重写。这体现了我们持续的努力——让使用 Highcharts 的 React 开发者能够获得更加自然、顺畅的开发体验。如果你一直在等待尝试新的集成&am…...

OpenClaw 生成测试用例

在安装完 OpenClaw 后,很多同学只会用它聊天。今天十二就带大家通过安装 Skill,让 OpenClaw 真正变成一个能理解业务、自动写用例的测试专家。 1、查找:测试用例生成Skills 全网 Skill 太多,不知道哪个生成的用例最靠谱。这里使用十二之前安装好的 find-skills 查找测试用…...

计算机毕业设计springboot数字化心理健康服务系统的设计与实现 基于SpringBoot的“树洞“心理咨询服务平台的设计与实现 基于SpringBoot的在线心理支持与智慧辅导平台

计算机毕业设计springboot数字化心理健康服务系统的设计与实现a2huw9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。近年来,心理健康问题呈直线上升趋势&#xff0c…...

DO-254通读--10.0 硬件设计生命周期数据

10.0 硬件设计生命周期数据 本节描述了在硬件设计生命周期中可能产生的硬件设计生命周期数据项,用于提供设计保证和符合审定要求的证据。审定机构作为设计保证证据所需的生命周期数据的范围、数量和详细程度将因多种因素而异。这些因素包括适用的航空系统审定机构要…...

蓝牙学习系列(一):从零认识蓝牙技术体系

目录 一、什么是蓝牙(Bluetooth) 二、蓝牙的发展版本 三、Classic Bluetooth 与 BLE 3.1 Classic Bluetooth(经典蓝牙) 3.2 BLE(Bluetooth Low Energy) 四、蓝牙设备角色 4.1 Classic Bluetooth 4.…...

成都双流整装工厂,哪家才是靠谱企业?

家人们,在成都双流找靠谱的整装工厂可真是一件让人头疼的事儿!市面上的装修公司五花八门,一不小心就容易踩坑。今天我就用自己的亲身经历,给大家好好唠唠哪家整装工厂才是真靠谱,那就是九天全屋整装!我家就…...

用python flask做了一个,批量查询,修改一堆excel文件的工具

每次要找在excel里面找文件时,都一个个打开,找半天。要修改时,一些类似的数据,又要一个个文件去修改,非常没有效率。这个工具作用就是批量查询与修改。B/S架构,读出来的excel常驻内存,注意&…...

基于LQR控制的主动悬架模型:构建平顺性仿真,涵盖多种车辆模型与源文件集

【被动/LQR主动悬架模型】采用LQR控制的主动悬架模型,选取车身加速度、悬架动挠度等参数构造线性二次型最优控制目标函数。 输入为B级随机路面激励,输出为车身垂向加速度、俯仰角加速度、悬架动挠度等平顺性评价指标,可做汽车平顺性仿真。 二…...

jQuery如何扩展百度WebUploader组件支持教育行业PPT课件的跨平台分片上传?

前端老兵的20G文件夹上传血泪史(附部分代码) 各位前端同仁们好,我是老王,一个在福建靠写代码混口饭吃的"前端民工"。最近接了个奇葩项目,客户要求用原生JS实现20G文件夹上传下载,还要兼容IE9&am…...

Android 15 深色模式:第三方应用强制适配深色模式的开关在哪里?

很多朋友在打开手机的深色模式(也叫暗黑模式)后,可能会发现一个问题:手机自己的界面和自带应用都变黑了,但很多常用的第三方软件,比如微信、淘宝或者一些银行APP,却还是亮晃晃的白色背景。这不仅…...

双向RRT算法的三维路径规划MATLAB代码:包含路径平滑处理

bi-rrt算法三维MATLAB代码 双向rrt算法的三维路径规划 加入路径的平滑处理直接打开MATLAB开整三维空间路径规划。双向RRT(Bi-RRT)这玩意儿比传统RRT快不是一点半点,核心思路就是两头长树往中间怼。咱们先看节点数据结构怎么设计: …...

“扫频法阻抗扫描验证及复现双馈风机MMC电压源型VSG阻抗建模与程序注释

扫频法 阻抗扫描 阻抗建模验证 正负序阻抗 逆变器 虚拟同步控制 VSG 复现 双馈风机MMC 电压源型VSG阻抗建模及阻抗扫描验证 虚拟同步发电机序阻抗建模 风机多端MMC 可设置扫描范围、扫描点数,附送讲解 程序附带注释,每一行都能看懂 包括vsg仿真模型&…...

【异常】OpenClaw 调用 API 限速报错 API rate limit reached. Please try again later.

一、报错内容 在使用 OpenClaw 进行接口调用时,系统返回以下报错信息: API rate limit reached. Please try again later. 同时提示当前订阅套餐已达到调用限额,需等待周期刷新或升级套餐,建议5小时后重新进行交互操作。 二、报错说明 1. 报错核心含义 本次报错的核心是…...

声源定位实战:从仿真到嵌入式落地

2022声源定位相关资料及代码 内附声源定位算法基本原理及matlab仿真原理及实现方法; stm32f4实现源码(2022电赛) 3米处水平横向精度0.013m(可优化更低)。 视频5s,无快进,mcu为stm32f429zit6。 …...

AI人脸隐私卫士实测:多人合照自动打码,效果惊艳

AI人脸隐私卫士实测:多人合照自动打码,效果惊艳 1. 引言:当合照遇上隐私,AI如何成为你的守护者? 你有没有过这样的经历?公司团建拍了张大合照,想发朋友圈分享喜悦,却要花上十几分钟…...

Vue 3 源码阅读笔记:ref.ts

文章目录一、文件概览二、核心数据结构1. Ref 接口定义三、核心函数实现1. isRef - 类型守卫2. r[ReactiveFlags.IS_REF]详解一、 r[ReactiveFlags.IS_REF] 是什么意思?二、这个标记是怎么来的?三、为什么需要这个标记?四、完整的标记系统五、…...

Java面向对象—反射

反射1、反射(Reflection):是Java被视为“动态”语言的关键,反射机制允许在执行期间借助于Reflection的API取得任何类(接口)的内部信息,并能直接操作任意对象的内部信息。2、Java反射机制主要提供了以下功能:(1&#xf…...

MATLAB高效声发射多通道数据分离与新数据集构建

matlab高效分离声发射各通道数据,构建新的数据集,亲测运行有效,小样本和大样本(百万级别)均适用,专业性和针对性强,确保运行无误可以直接最近在实验室折腾声发射数据,发现多通道采集的数据处理起来特别费劲…...

距离提交只剩3天,查重48%:毕业之家AI工具把我从延毕边缘拉了回来

毕业之家(官网https://www.biye.com)是聚焦国内高校论文全生命周期的 AI 学术服务平台,作为 PaperRed 核心合作与技术支撑方,以学术合规为核心、高效便捷为导向,打造了选题到答辩的一站式闭环服务,尤其针对…...

跨境卖家如何用品类矩阵规划减少对单一类目的依赖

在波谲云诡的跨境电商领域,许多卖家曾凭借一款爆品迅速崛起,却又因市场风向突变、政策调整或供应链断裂而骤然跌落。这种“成也萧何,败也萧何”的单一品类依赖症,已成为悬在众多跨境企业头上的达摩克利斯之剑。要构建可持续、抗风…...

Vue3+Element Plus实战:给el-dialog加个『老板键』(一键全屏/拖拽/记忆位置)

Vue3 Element Plus 弹窗『老板键』:全屏、拖拽与位置记忆的工程化实现 你是否遇到过这样的场景?正在一个复杂的后台管理系统中处理数据,弹窗里展示着关键图表或表单,突然需要快速切换到另一个应用,或者临时需要隐藏当…...

Java 面向对象设计题3

11. 用户类设计 11.定义一个用户类(User),包含用户名(username)和密码(password)属性,提供静态方法验证密码是否有效(长度至少为6),并提供getter和setter方法。 class User {private String username;private String password;public User(St…...