日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

DFA算法,高效實現敏感詞檢測與替換!

來源: 責編: 時間:2023-10-27 09:14:41 281觀看
導讀在信息爆炸的時代,網絡上充斥著大量的敏感信息,可能會產生很多的負面影響。為了應對這一挑戰,一直在尋求有效的方式來替換或過濾掉敏感字詞,而Java DFA(Deterministic Finite Automaton)算法正是在這方面發揮著關鍵作用。什

WqF28資訊網——每日最新資訊28at.com

在信息爆炸的時代,網絡上充斥著大量的敏感信息,可能會產生很多的負面影響。為了應對這一挑戰,一直在尋求有效的方式來替換或過濾掉敏感字詞,而Java DFA(Deterministic Finite Automaton)算法正是在這方面發揮著關鍵作用。WqF28資訊網——每日最新資訊28at.com

什么是DFA算法?

DFA即Deterministic Finite Automaton,是一種有窮自動機,通常用于處理字符串匹配問題。在Java中,DFA算法用于搜索和替換文本中的特定模式,如敏感字詞或關鍵詞。DFA算法通過將文本逐字符逐字符地與事先定義好的敏感字列表進行比較,從而快速而高效地檢測和替換敏感字。WqF28資訊網——每日最新資訊28at.com

Java DFA算法的工作原理

DFA算法基于狀態轉移。它首先構建一個狀態轉移圖,其中每個狀態代表算法在處理字符串時的狀態。然后,算法從輸入文本的開頭開始,根據當前字符和當前狀態,查找下一個狀態,并根據狀態的不同采取不同的操作。當輸入文本中的字符被處理完畢時,算法會得到一個已替換敏感字的文本或者是否包含敏感詞的一個狀態。WqF28資訊網——每日最新資訊28at.com

例如替換文本中的敏感詞:WqF28資訊網——每日最新資訊28at.com

文本:Java新視界,為你開啟Java世界的大門。實用技巧,深度解析,讓Java更簡單,更強大!一起攀登Java技術高峰,實現編程夢想!敏感詞列表:["新視界", "新視野", "技術", "技術高峰", "編程夢想", "實現夢想"]

基于敏感詞,構建森林:WqF28資訊網——每日最新資訊28at.com

WqF28資訊網——每日最新資訊28at.com

基于森林,構建JSON對象:WqF28資訊網——每日最新資訊28at.com

{    "技":{        "isEnd":"0",        "術":{            "高":{                "峰":{                    "isEnd":"1"                },                "isEnd":"0"            },            "isEnd":"1"        }    },    "新":{        "isEnd":"0",        "視":{            "界":{                "isEnd":"1"            },            "isEnd":"0",            "野":{                "isEnd":"1"            }        }    },    "編":{        "isEnd":"0",        "程":{            "isEnd":"0",            "夢":{                "isEnd":"0",                "想":{                    "isEnd":"1"                }            }        }    },    "實":{        "現":{            "isEnd":"0",            "夢":{                "isEnd":"0",                "想":{                    "isEnd":"1"                }            }        },        "isEnd":"0"    }}

DFA算法實現

mport java.util.*;/** * 敏感詞處理工具 - DFA算法實現 * @author Java新視界 * @modifier Java新視界 * @date 2023/10/25 16:58 */public class SensitiveWordUtil {    /**     * 敏感詞匹配規則     */    public static final int MIN_MATCH_TYPE = 1;      //最小匹配規則,如:敏感詞庫["新視界","視界"],語句:"Java新視界",匹配結果:Java新[視界]    public static final int MAX_MATCH_TYPE = 2;      //最大匹配規則,如:敏感詞庫["新視界","視界"],語句:"Java新視界",匹配結果:Java[新視界]     private static Map<String, Object> initSensitiveWordMap(Set<String> sensitiveWordSet) {        Map<String, Object> map = new HashMap(Math.max((int) (sensitiveWordSet.size() / .75f) + 1, 16));    //初始化敏感詞容器,減少擴容操作        for (String aKeyWordSet : sensitiveWordSet) {   //迭代keyWordSet            Map nowMap = map;            for (int i = 0; i < aKeyWordSet.length(); i++) {                char keyChar = aKeyWordSet.charAt(i);                Object wordMap = nowMap.get(keyChar);                if (wordMap != null) {                    nowMap = (Map) wordMap;         //如果存在該key,直接賦值                } else {                            //不存在則,則構建一個map,同時將isEnd設置為0                    Map<String, String> newWorMap = new HashMap<>(3);                    newWorMap.put("isEnd", "0");                    nowMap.put(keyChar, newWorMap);                    nowMap = newWorMap;                }                if (i == aKeyWordSet.length() - 1) {//判斷最后一個                    nowMap.put("isEnd", "1");                }            }        }        return map;    }     public static Set<String> getSensitiveWord(Set<String> sensitiveWordSet,String txt, int matchType) {        Set<String> sensitiveWordList = new HashSet<>();        Map<String, Object> map = initSensitiveWordMap(sensitiveWordSet);        for (int i = 0; i < txt.length(); i++) {     //判斷是否包含敏感字符            int length = checkSensitiveWord(map,txt, i, matchType);            if (length > 0) {           //存在,加入list中                sensitiveWordList.add(txt.substring(i, i + length));                i = i + length - 1;     //減1的原因,是因為for會自增            }        }         return sensitiveWordList;    }     public static String replaceSensitiveWord(Set<String> sensitiveWordSet, String txt, char replaceChar, int matchType) {        String resultTxt = txt;        //獲取所有的敏感詞        Set<String> set = getSensitiveWord(sensitiveWordSet,txt, matchType);        Iterator<String> iterator = set.iterator();        String word;        String replaceString;        while (iterator.hasNext()) {            word = iterator.next();            replaceString = getReplaceChars(replaceChar, word.length());            resultTxt = resultTxt.replaceAll(word, replaceString);        }         return resultTxt;    }     public static String replaceSensitiveWord(Set<String> sensitiveWordSet, String txt, String replaceStr, int matchType) {        String resultTxt = txt;        //獲取所有的敏感詞        Set<String> set = getSensitiveWord(sensitiveWordSet,txt, matchType);        Iterator<String> iterator = set.iterator();        String word;        while (iterator.hasNext()) {            word = iterator.next();            resultTxt = resultTxt.replaceAll(word, replaceStr);        }         return resultTxt;    }     private static String getReplaceChars(char replaceChar, int length) {        String resultReplace = String.valueOf(replaceChar);        for (int i = 1; i < length; i++) {            resultReplace += replaceChar;        }         return resultReplace;    }     private static int checkSensitiveWord(Map<String, Object> nowMap, String txt, int beginIndex, int matchType) {        boolean flag = false;        int matchFlag = 0;        char word;        for (int i = beginIndex; i < txt.length(); i++) {            word = txt.charAt(i);            //獲取指定key            nowMap = (Map<String, Object>) nowMap.get(word);            if (nowMap != null) {               //存在,則判斷是否為最后一個                matchFlag++;                    //找到相應key,匹配標識+1                //如果為最后一個匹配規則,結束循環,返回匹配標識數                if ("1".equals(nowMap.get("isEnd"))) {                    flag = true;                //結束標志位為true                    //最小規則,直接返回,最大規則還需繼續查找                    if (MIN_MATCH_TYPE == matchType) {                        break;                    }                }            } else {                            //不存在,直接返回                break;            }        }        if (matchFlag < 2 || !flag) {           //長度必須大于等于1,為詞            matchFlag = 0;        }        return matchFlag;    }}

DFA算法測試

public static void main(String[] args) {    Set<String> sensitiveWordSet = new HashSet<>(Arrays.asList("新視界", "新視野","技術", "技術高峰", "編程夢想", "實現夢想"));    String string = "Java新視界,為你開啟Java世界的大門。實用技巧,深度解析,讓Java更簡單,更強大!一起攀登Java技術高峰,實現編程夢想!";    //獲取語句中的敏感詞    Set<String> set = SensitiveWordUtil.getSensitiveWord(sensitiveWordSet,string, SensitiveWordUtil.MAX_MATCH_TYPE);    System.out.println("語句中 包含敏感詞的個數為:" + set.size() + "。包含:" + set);    set = SensitiveWordUtil.getSensitiveWord(sensitiveWordSet,string, SensitiveWordUtil.MIN_MATCH_TYPE);    System.out.println("語句中 包含敏感詞的個數為:" + set.size() + "。包含:" + set);    //替換語句中的敏感詞    String filterStr = SensitiveWordUtil.replaceSensitiveWord(sensitiveWordSet,string, '*', SensitiveWordUtil.MAX_MATCH_TYPE);    System.out.println(filterStr);    filterStr = SensitiveWordUtil.replaceSensitiveWord(sensitiveWordSet,string, '*', SensitiveWordUtil.MIN_MATCH_TYPE);    System.out.println(filterStr);}

運行結果:WqF28資訊網——每日最新資訊28at.com

WqF28資訊網——每日最新資訊28at.com

DFA算法在替換敏感字領域的應用

  • 言論過濾:社交媒體平臺和在線論壇經常使用Java DFA算法來檢測和替換敏感字。這有助于維護社區的友好環境,減少網絡欺凌和不當言論。
  • 敏感信息過濾:在金融領域,DFA算法可以用于檢測和替換敏感信息,如銀行賬號、信用卡號和社保號。這有助于確保用戶的隱私和數據安全。
  • 兒童保護:兒童在線安全是一個重要問題。DFA算法可以用于過濾兒童不適宜的內容,確保他們在互聯網上的安全體驗。
  • 政治和宗教領域:政府和宗教組織也使用DFA算法來檢測和替換具有沖突性的言論,以維護社會和諧。

優勢與挑戰

優勢:WqF28資訊網——每日最新資訊28at.com

  • 高效性:DFA算法能夠快速處理大量的文本數據,使其在實時應用中具有優勢。
  • 可擴展性:可以根據需要輕松擴展敏感字詞列表。
  • 精確性:算法的確定性保證了替換的準確性。

挑戰:WqF28資訊網——每日最新資訊28at.com

  • 敏感字庫維護:需要不斷更新和維護敏感字庫,以適應新出現的敏感詞匯。
  • 多語言支持:不同語言的敏感字替換需要額外的處理。
  • 性能優化:隨著輸入文本長度的增加,算法的性能可能會下降。

總的來說,DFA算法在替換敏感字領域具有廣泛的應用,為網絡社區、金融機構、政府和其他領域提供了一種強大工具,用于過濾和替換敏感信息,維護社會秩序,保護用戶的隱私,以及確保互聯網上的安全和和諧。隨著技術的不斷發展,DFA算法將繼續發揮重要作用,以適應不斷變化的需求和挑戰。WqF28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-15314-0.htmlDFA算法,高效實現敏感詞檢測與替換!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: OpenJDK JCov-測試你的代碼覆蓋率

下一篇: 微博二面:所有對象都一定被分配在堆中么?

標簽:
  • 熱門焦點
  • 對標蘋果的靈動島 華為帶來實況窗功能

    繼蘋果的靈動島之后,華為也在今天正式推出了“實況窗”功能。據今天鴻蒙OS 4.0的現場演示顯示,華為的實況窗可以更高效的展現出實時通知,比如鎖屏上就能看到外賣、打車、銀行
  • 紅魔電競平板評測:大屏幕硬實力

    前言:三年的疫情因為要上網課的原因激活了平板市場,如今網課的時代已經過去,大家的生活都恢復到了正軌,這也就意味著,真正考驗平板電腦生存的環境來了。也就是面對著這種殘酷的
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結?,F在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • 分享六款相見恨晚的PPT模版網站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網站旨在為全球Office用戶提供豐富的高品質原創PPT模板、實用文檔、數據圖表及個性化定制服務。優點:OfficePLUS是微軟官方網站,囊括PPT模板、Word模
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    &copy;自象限原創作者|程心排版|王喻可2016年7月13日,百度云計算戰略發布會在北京舉行,宣告著百度智能云的正式啟程。彼時的會場座無虛席,甚至排隊排到了門外,在場的所有人幾乎都
  • 騰訊蓋樓,字節拆墻

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之&ldquo;想重溫暴刷深淵、30+技能搭配暴搓到爽的游戲體驗嗎?一起上晶核,即刻暴打!&rdquo;曾憑借直播騰訊旗下代理格斗游戲《DNF》一
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 2299元起!iQOO Pad開啟預售:性能最強天璣平板

    5月23日,iQOO如期舉行了新品發布會,除了首發安卓最強旗艦處理器的iQOO Neo8系列新機外,還在發布會上推出了旗下首款平板電腦——iQOO Pad,其搭載了天璣
Top 主站蜘蛛池模板: 佛冈县| 长沙县| 清原| 翼城县| 大同县| 德保县| 揭西县| 合山市| 铜陵市| 姜堰市| 乌兰浩特市| 无锡市| 简阳市| 乡宁县| 南平市| 岑巩县| 仁寿县| 饶阳县| 安福县| 桂东县| 乌兰察布市| 镇巴县| 长岛县| 慈利县| 尚志市| 郎溪县| 长武县| 广东省| 武山县| 南康市| 呈贡县| 化德县| 洛阳市| 镇远县| 永昌县| 谢通门县| 库尔勒市| 兴义市| 开化县| 望都县| 平利县|