东莞石龙网站建设wordpress最新版怎么变成英文

news/2025/9/25 22:54:14/文章来源:
东莞石龙网站建设,wordpress最新版怎么变成英文,秦皇岛手机网站,哪个推广网站好在游戏中经常会有需要玩家输入一些内容的功能#xff0c;例如聊天#xff0c;命名等#xff0c;这款游戏只有在存档时辉用到命名功能#xff0c;所以这个过滤也只是一个实验性的功能#xff0c;我们将使用AC自动机来实现#xff0c;这是在我们把“csdn”这个词设置为屏蔽…         在游戏中经常会有需要玩家输入一些内容的功能例如聊天命名等这款游戏只有在存档时辉用到命名功能所以这个过滤也只是一个实验性的功能我们将使用AC自动机来实现这是在我们把“csdn”这个词设置为屏蔽词后的效果 目录 一、敏感词词典的处理 二、搭建AC自动机 1.自动机节点的数据机构 2.加载词典 3.建立字典树 4.建立失配指针 三、替换字符串中的敏感词 一、敏感词词典的处理 我们是从别的地方找的开源词典所以要做一下筛选首先我们要去重然后去除所有的标点符号空格和其他无关字符然后同时去掉长度为1的字符因为其会在AC自动机中表现的过于严格 wifstream InputTxt; wofstream OutputTxt; //词典的路径这里是单独开了一个程序所以和后面项目里相关代码用到的路径不同 InputTxt.open(Dict.txt, ios::out); //使用宽字符串读入 wstring Word; mapwstring, boolWords; while (getline(InputTxt,Word)) {//去重if (Words.find(Word) Words.end()){//去掉短字但这里对中文无效因为一个中文字长度大概率不为1if (Word.size() 1)continue;for (auto It1 : Word){//统一成小写if (iswupper(It1)){It1 towlower(It1);}//去除字符 if (iswpunct(It1)||iswblank(It1)||iswspace(It1)){Word.erase(It1);It1--;} }//记录这个词处理完毕Words[Word] true;} } InputTxt.close(); OutputTxt.open(Dict.txt, ios::out); //将处理完的词重新写入词典 for (auto It: Words) {OutputTxt It.first endl; } 二、搭建AC自动机 AC自动机就是在字典树的基础上加入了类似于KMP的失配指针当匹配串在树上失配时会回溯到某个上一层的节点该节点的所有父节点即前缀和失配节点的所有父节点的后缀形成最大匹配使多模匹配的效率达到近似O(匹配串长度) 1.自动机节点的数据机构 因为我们要将匹配到的敏感词替换成*所以相比于一般的自动机节点要在每个词的末尾记录这个词的长度同时因为不止26个字母所以也用红黑树替代了数组 class FSensitiveWordFilterStruct { public:FSensitiveWordFilterStruct()default;explicit FSensitiveWordFilterStruct(const wchar_tInputCharacter):Character(InputCharacter){};//字符wchar_t Character{#};//匹配的字符串的长度int Length{0};//子节点TMapwchar_t,std::shared_ptrFSensitiveWordFilterStructChildNode;//失配指针FSensitiveWordFilterStruct* FailPointer{this}; }; 然后我们在游戏实例中声明自动机的根节点 //屏蔽词过滤器树根 std::shared_ptr FSensitiveWordFilterStructSensitiveWordFilterRoot; 在游戏启动时初始化AC自动机用到的函数后面一个一个讲 UAstromutateGameInstance::UAstromutateGameInstance() {//加载词典LoadTXTFile(/Movies/Dict.txt);//实例化自动机根节点SensitiveWordFilterRootstd::make_sharedFSensitiveWordFilterStruct(FSensitiveWordFilterStruct());//将词典中的词添加到树上for(const autoIt:*SensitiveWords){AddWordToSensitiveWordTree(It);}//建立失配指针InitializeSensitiveWordTree(); } 2.加载词典 这里我们把词典作为txt文件放在Movies文件夹下因为该文件夹中的所有文件都会被原封不动的打包我们将所有敏感词存到一个TArray中 //声明敏感词词典 TSharedPtrTArrayFString SensitiveWords; auto UAstromutateGameInstance::LoadTXTFile(const FString Path)-void {//获取词典路径FString Temp{FPaths::ProjectContentDir()Path};//实例化词典数组SensitiveWordsMakeSharedTArrayFString(TArrayFString());//加载所有词FFileHelper::LoadFileToStringArray(*SensitiveWords,*Temp);UE_LOG(LogTemp,Warning,TEXT(SensitiveWords loade %d Words),SensitiveWords-Num()); } 3.建立字典树 从根节点开始遍历模式串如果当前点没有当前字符对应的子节点就创建之然后无论有无都移动到该子节点 auto UAstromutateGameInstance::AddWordToSensitiveWordTree(const FString InputString) const-void {//获取根节点FSensitiveWordFilterStruct* TempSensitiveWordFilterRoot.get();//遍历模式串中的每一个字符for(const autoIt:InputString){wchar_t CurrentChar{It};//如果当前点没有对应的子节点就添加之if(!Temp-ChildNode.Contains(CurrentChar)){Temp-ChildNode.Add(CurrentChar,std::make_sharedFSensitiveWordFilterStruct(FSensitiveWordFilterStruct(CurrentChar)));}TempTemp-ChildNode[CurrentChar].get();}//将词的长度记录在词尾Temp-LengthInputString.Len(); } 4.建立失配指针 因为失配指针指向的节点一定在当前点的上层所以我们进行bfs首先将根节点的所有直连的子节点的失配指针指向根节点因为这些点的上层节点只有根节点。然后对于一个失配点如果其父节点的失配指针指向的点的子节点中有和该失配点相同的点则失配点的失配指针指向该点否则指向根节点 auto UAstromutateGameInstance::InitializeSensitiveWordTree() const - void {//bfs队列std::queuestd::shared_ptrFSensitiveWordFilterStructQueue;//将深度为1的点的失配指针指向根节点for(autoIt:SensitiveWordFilterRoot-ChildNode){It.Value-FailPointerSensitiveWordFilterRoot.get();Queue.push(std::make_sharedFSensitiveWordFilterStruct(*It.Value));}while(!Queue.empty()){std::shared_ptrFSensitiveWordFilterStruct CurrentNodeQueue.front();Queue.pop();//遍历所有子节点for(autoIt:CurrentNode-ChildNode){//父节点的失配指针指向的节点是否含有匹配的子节点if(!CurrentNode-FailPointer-ChildNode.Contains(It.Key)){It.Value-FailPointerSensitiveWordFilterRoot.get();}else{It.Value-FailPointerCurrentNode-FailPointer-ChildNode[It.Key].get();}Queue.push(std::make_sharedFSensitiveWordFilterStruct(*It.Value));}} } 三、替换字符串中的敏感词 首先我们将玩家输入的字符串使用字典中字符串同样的方法进行处理去除符号和空格全部转为小写然后遍历其每一个字符不匹配就按失配指针移动匹配就检查是否是词尾如果是的话根据记录的词的长度算出这个词的区间将这个居间内的所有字符替换成*该操作不会影响到后面的匹配最后将字符串还原成原来有符号和空格的格式并返回 auto UAstromutateGameInstance::ReplaceSensitiveWords(const FString RawString)-FString {FString Result{};//对玩家输入的字符串进行处理for(const autoIt:RawString){if(iswpunct(It)||iswblank(It)||iswspace(It))continue;if(isupper(It))Resulttowlower(It);elseResultIt;}FSensitiveWordFilterStruct* Temp{SensitiveWordFilterRoot.get()};//遍历匹配串的每一个字符for(int i0;iResult.Len();i){wchar_t CurrentChar{Result[i]};//如果失配就一直回溯直到根节点while(!Temp-ChildNode.Contains(CurrentChar)Temp!SensitiveWordFilterRoot.get()){TempTemp-FailPointer;}//仍然适配就结束这个字符的搜索if(!Temp-ChildNode.Contains(CurrentChar)){TempSensitiveWordFilterRoot.get();continue;}//移动到匹配的节点TempTemp-ChildNode[CurrentChar].get();FSensitiveWordFilterStruct* Temp2{Temp};//遍历匹配到的所有词while(Temp2!SensitiveWordFilterRoot.get()){if(Temp2-Length){//根据长度算出该词其实位置for(int ji-Temp2-Length1;ji;j){Result[j]*;}}Temp2Temp2-FailPointer;}}//将处理完的字符串还原成输入的格式FString TrueResult{RawString};int CurrentIndex{0};for(autoIt:TrueResult){if(iswpunct(It)||iswblank(It)||iswspace(It))continue;if(iswupper(It)iswlower(Result[CurrentIndex])){continue;}ItResult[CurrentIndex];}return TrueResult; }

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

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

相关文章

微网站页面自助建站系统官方版

目录深搜200. 岛屿数量695. 岛屿的最大面积130. 被围绕的区域547. 省份数量417. 太平洋大西洋水流问题回溯广搜111. 二叉树的最小深度752. 打开转盘锁深搜与广搜结合934. 最短的桥深搜 深搜DFS,在搜索到一个新节点时,立即对该新节点进行遍历&#xff0c…

汕头市企业网站建设品牌沈阳公司网站

直接上代码: #初始化用户信息 import randomprint("本比赛参赛英雄为:1老夫子 2典韦 3吕布") name int(input("请您选择出场英雄:"))if name 1:print("您本次选择的英雄为:老夫子——我会让你明白什么…

Java 生态监控体系实战:Prometheus+Grafana+SkyWalking 整合全指南(三) - 教程

Java 生态监控体系实战:Prometheus+Grafana+SkyWalking 整合全指南(三) - 教程2025-09-25 22:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overf…

【网络编程】UDP 编程实战:从套接字到聊天室多场景计划构建

【网络编程】UDP 编程实战:从套接字到聊天室多场景计划构建pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

网站重新备案需要多长时间深圳移动网站建设

当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建三个权限,分别为:add、change、delete,如果给…

做网站的顶部图片怎么打开文件做的网站

目录 一.平台架构与技术特点 二、DeepSeek R1模型介绍与优势 DeepSeek R1 模型简介 DeepSeek R1 模型优势 三.蓝耘智算平台使用DeepSeek教程 展望未来 耘元生代智算云是蓝耘科技推出的一款智算云平台有着以下特点: 一.平台架构与技术特点 基于 Kubernetes 原…

AC自动机在线版本(alert命中报警)

模板洛谷p3311 code: #include<bits/stdc++.h> using namespace std; typedef long long LL; // 常量定义:N为AC自动机状态数上限、数位DP位数上限;mod为答案取模值 const int N=2010,mod=1e9+7;// AC自动机核…

US$79 BMW FEM/BDC Key Programmer Data Desktop Test Platform for FEM/BDC Key and Program ECU Gearbox

BMW FEM/BDC Key Programmer Data Desktop Test Platform for FEM/BDC Key and Program ECU GearboxFEM BDC Module Testing Platform for BMW F20 F30 F35 X5 X6 I3With your FEM/BDC keys, FEM BDC Module Testing P…

week1 homework

C语言代码规范 参考了大公司的标准 1、程序采用缩进风格,每层缩进使用一个制表位(TAB) 2、源程序使用英文书写,尽量不含有中文。 3、左花括号要另起一行,不能跟在上一行的行末; 4、一个变量定义占一行,一个语句…

(南科大深度学习课程笔记)Lecture_2_Mathematical background(数学背景)(上) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

app那个网站开发比较好xp优化大师

Serverless 话题涉及范围极广&#xff0c;几乎包含了代码管理、测试、发布、运维和扩容等与应用生命周期关联的所有环节。在线应用如何不改代码也能迁移到 Serverless 架构&#xff1f;今天&#xff0c;我们来揭秘阿里巴巴成千上万在线应用的Serverless 演进过程。 AWS Lambda …

最牛网站建设是谁装饰公司办公室图片

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 什么是WebSocket&#xff1f; WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久…

Java EE ----- Spring MVC (上) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

秦皇岛网站排名郑州手机网站制作公司哪家好

可以删一下 按住alt按移除可以删掉 选择你要删的那些线 按住alt点移除

浦东做网站如何在社交网站做销售

一、介绍部分 (win7 下的 GUI 效果图见 本篇文章的最后部分截图2张)wxWidgets是一个开源的跨平台的C构架库(framework)&#xff0c;它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK或Motif的Unix和MacOS。相当于大家熟悉的 VC。二、wxWidge…

Windows 10 C盘占用释放 - tfel

C盘又要撑爆...前言 安装的Windows 10 LSTC, 系统盘留了 200G 最近发现可用只剩下50G, 甚至还在减少 排查 使用 SpaceSniffer 看下具体占用 好用,到Windows 10我也觉得它装机必备!!!占用大头 网易云音乐 缓存它默认…

CherryStudio+cpolar:让智能工作流突破组织边界 - 详解

CherryStudio+cpolar:让智能工作流突破组织边界 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

科学计算方法--矩阵分析记录

1. 前言砚上三五笔,落墨鹧鸪啼本文用于记录:科学计算方法--矩阵分析记录 最近有点忘记矩阵了(汗),这里记录一下。 如有不对,欢迎评论区指正! 2. 正文 2.1 矩阵(matrix) 矩阵理解为空间中的一种变换,作用到对…

window.addEventListener(message,()={})中的回调函数无故被一直触发的问题 - broky

遇到的问题使用第一个进入无痕模式就没有被一直触发的问题了 一、最可能的 3 个 “隐式消息发送源”(非你主动写的代码)浏览器插件 / 扩展程序发送的消息 很多浏览器插件(如广告拦截、翻译、开发者工具插件)会通过…