日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

基于java實現DFA算法代碼實例

瀏覽:36日期:2022-08-25 16:05:17

DFA簡介

DFA全稱為:Deterministic Finite Automaton,即確定有窮自動機。(自己百度吧)

直接代碼:

敏感詞實體類

package com.nopsmile.dfa;public class Keywords { private String pid; private String Content; public Keywords() { } public Keywords(String content) { super(); Content = content; } public String getContent() { return Content; } public void setContent(String content) { Content = content; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; }}

敏感詞庫初始化

package com.nopsmile.dfa;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;/** * 敏感詞庫初始化 * */public class SensitiveWordInit{ /** * 敏感詞庫 */ public HashMap sensitiveWordMap; /** * 初始化敏感詞 keywords */ public Map initKeyWord(List<Keywords> sensitiveWords) { try { // 從敏感詞集合對象中取出敏感詞并封裝到Set集合中 Set<String> keyWordSet = new HashSet<String>(); for (Keywords s : sensitiveWords) {keyWordSet.add(s.getContent().trim()); } // 將敏感詞庫加入到HashMap中 addSensitiveWordToHashMap(keyWordSet); } catch (Exception e) { e.printStackTrace(); } return sensitiveWordMap; } /** * 封裝敏感詞庫 */ private void addSensitiveWordToHashMap(Set<String> keyWordSet) { // 初始化HashMap對象并控制容器的大小 sensitiveWordMap = new HashMap(keyWordSet.size()); // 敏感詞 String key = null; // 用來按照相應的格式保存敏感詞庫數據 Map nowMap = null; // 用來輔助構建敏感詞庫 Map<String, String> newWorMap = null; // 使用一個迭代器來循環敏感詞集合 Iterator<String> iterator = keyWordSet.iterator(); while (iterator.hasNext()) { key = iterator.next(); // 等于敏感詞庫,HashMap對象在內存中占用的是同一個地址,所以此nowMap對象的變化,sensitiveWordMap對象也會跟著改變 nowMap = sensitiveWordMap; for (int i = 0; i < key.length(); i++) {// 截取敏感詞當中的字,在敏感詞庫中字為HashMap對象的Key鍵值char keyChar = key.charAt(i);// 判斷這個字是否存在于敏感詞庫中Object wordMap = nowMap.get(keyChar);if (wordMap != null) { nowMap = (Map) wordMap;} else { newWorMap = new HashMap<String, String>(); newWorMap.put('isEnd', '0'); nowMap.put(keyChar, newWorMap); nowMap = newWorMap;}// 如果該字是當前敏感詞的最后一個字,則標識為結尾字if (i == key.length() - 1) { nowMap.put('isEnd', '1');} } } }}

自定義的工具類

package com.nopsmile.dfa;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedHashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.Set;import com.alibaba.fastjson.JSONArray;import net.sf.json.JSONObject;/** * 敏感詞過濾工具類 * * @author AlanLee * */public class SensitivewordUtils { /** * 敏感詞庫 */ public static Map sensitiveWordMap = null; /** * 只過濾最小敏感詞 */ public static int minMatchTYpe = 1; /** * 過濾所有敏感詞 */ public static int maxMatchType = 2; /** * 敏感詞庫敏感詞數量 * * @return */ public static int getWordSize() { if (SensitivewordUtils.sensitiveWordMap == null) { return 0; } return SensitivewordUtils.sensitiveWordMap.size(); } /** * 是否包含敏感詞 * */ public static boolean isContaintSensitiveWord(String txt, int matchType) { boolean flag = false; for (int i = 0; i < txt.length(); i++) { int matchFlag = checkSensitiveWord(txt, i, matchType); if (matchFlag > 0) {flag = true; } } return flag; } /** * 獲取敏感詞內容 * * @param txt * @param matchType * @return 敏感詞內容 */ public static Set<String> getSensitiveWord(String txt, int matchType) { Set<String> sensitiveWordList = new HashSet<String>(); for (int i = 0; i < txt.length(); i++) { int length = checkSensitiveWord(txt, i, matchType); if (length > 0) {// 將檢測出的敏感詞保存到集合中sensitiveWordList.add(txt.substring(i, i + length));i = i + length - 1; } } return sensitiveWordList; } /** * 替換敏感詞 * */ public static String replaceSensitiveWord(String txt, int matchType, String replaceChar) { String resultTxt = txt; Set<String> set = getSensitiveWord(txt, matchType); Iterator<String> iterator = set.iterator(); String word = null; String replaceString = null; while (iterator.hasNext()) { word = iterator.next(); replaceString = getReplaceChars(replaceChar, word.length()); resultTxt = resultTxt.replaceAll(word, replaceString); } return resultTxt; } /** * 替換敏感詞內容 * */ private static String getReplaceChars(String replaceChar, int length) { String resultReplace = replaceChar; for (int i = 1; i < length; i++) { resultReplace += replaceChar; } return resultReplace; } /** * 檢查敏感詞數量 * */ public static int checkSensitiveWord(String txt, int beginIndex, int matchType) { boolean flag = false; // 記錄敏感詞數量 int matchFlag = 0; char word = 0; Map nowMap = SensitivewordUtils.sensitiveWordMap; for (int i = beginIndex; i < txt.length(); i++) { word = txt.charAt(i); // 判斷該字是否存在于敏感詞庫中 nowMap = (Map) nowMap.get(word); if (nowMap != null) {matchFlag++;// 判斷是否是敏感詞的結尾字,如果是結尾字則判斷是否繼續檢測if ('1'.equals(nowMap.get('isEnd'))) { flag = true; // 判斷過濾類型,如果是小過濾則跳出循環,否則繼續循環 if (SensitivewordUtils.minMatchTYpe == matchType) { break; }} } else {break; } } if (!flag) { matchFlag = 0; } return matchFlag; } /** * 敏感詞匯對應個數 * 返回 '關鍵字'='關鍵字個數' * */ public static Map getSensitiveWordSum(String txt, int matchType) { Map<String,Integer> map = new HashMap<String,Integer>(); for (int i = 0; i < txt.length(); i++) { int length = checkSensitiveWord(txt, i, matchType); if (length > 0) {// 將檢測出的敏感詞保存到集合中String str=txt.substring(i, i + length);if(map.containsKey(str)) { map.put(str, map.get(str).intValue()+1);}else { map.put(str, new Integer(1));}//System.out.println(txt.substring(i, i + length));i = i + length - 1; } } return map; } /** * 對map數組value排序,并取前10 * this method will always sort the map; * isCondition is true condition can be used otherwise invalid * @param unsortMap * @return */ public static Map<String, Integer> sortByValue(Map<String, Integer> unsortMap,int condition,boolean isCondition) { // 1. Convert Map to List of Map List<Map.Entry<String, Integer>> list =new LinkedList<Map.Entry<String, Integer>>(unsortMap.entrySet()); // 2. Sort list with Collections.sort(), provide a custom Comparator // Try switch the o1 o2 position for a different order Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2) {return (o2.getValue()).compareTo(o1.getValue()); } }); // 3. Loop the sorted list and put it into a new insertion order Map LinkedHashMap Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>(); if(isCondition) { for (int i = 0; i < list.size(); i++) {if (i < condition) { sortedMap.put(list.get(i).getKey(), list.get(i).getValue());} } }else{ for (int i = 0; i < list.size(); i++) { sortedMap.put(list.get(i).getKey(), list.get(i).getValue()); } } return sortedMap; }}

使用上面類流程代碼

Keywords ss=new Keywords('好');List list = new ArrayList();list.add(ss);SensitiveWordInit sensitiveWordInit = new SensitiveWordInit();Map sensitiveWordMap = sensitiveWordInit.initKeyWord(list);// 傳入SensitivewordEngine類中的敏感詞庫SensitivewordUtils.sensitiveWordMap = sensitiveWordMap;SensitivewordUtils.getSensitiveWordSum('需要檢測的文本', 2) ;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产伊人久久| 日韩高清一级| 都市激情国产精品| 精品国产一区二区三区2021| 丝袜诱惑一区二区| 国产亚洲一区二区手机在线观看| 波多野结衣久久精品| 激情黄产视频在线免费观看| 鲁大师影院一区二区三区| 国产精品视区| 国产图片一区| 欧洲av不卡| aa国产精品| 狠狠躁少妇一区二区三区| 首页亚洲欧美制服丝腿| 另类av一区二区| 在线精品观看| 久久69成人| 日韩高清中文字幕一区二区| 亚洲性视频h| 日韩精品三级| 九九色在线视频| 亚洲精品四区| 91精品韩国| 国产精品久久观看| 久久久久亚洲| 一区二区亚洲精品| 美美哒免费高清在线观看视频一区二区 | 在线精品视频在线观看高清| 三上悠亚国产精品一区二区三区| 久久久精品午夜少妇| 亚洲高清影视| 欧美日韩在线播放视频| 超级白嫩亚洲国产第一| 国产一区二区高清| 欧美私人啪啪vps| 色老板在线视频一区二区| 国产三级精品三级在线观看国产| 国产精品外国| 亚洲精品一区二区妖精| 日韩在线综合| 国产亚洲欧洲| 久久国产精品久久久久久电车| 欧美日韩一区二区三区视频播放| 亚洲va中文在线播放免费| 精品少妇一区| 六月婷婷一区| 亚洲精品一区二区在线播放∴| 婷婷综合国产| 国产精品成人自拍| 另类专区亚洲| 午夜电影亚洲| 深夜福利亚洲| 婷婷亚洲成人| 日韩高清一区二区| 国产欧美一区二区精品久久久 | 国产免费av一区二区三区| 97精品97| 91福利精品在线观看| 久久一区二区三区喷水| 国产精区一区二区| 久久亚洲影院| 国产96在线亚洲| 日韩国产高清在线| 99日韩精品| 欧美男人天堂| 日韩精品一区二区三区中文字幕| 性色一区二区| 日韩一区电影| 国产精品巨作av| 免费在线观看视频一区| yellow在线观看网址| 国产精品蜜月aⅴ在线| 丝袜亚洲另类欧美| 日韩国产专区| 高清一区二区三区av| 日本成人在线不卡视频| 久久久久久久久丰满| 免费看久久久| 欧美国产日本| 国产黄色一区| 国产中文在线播放| 综合一区av| 一本一道久久a久久精品蜜桃| 久久这里只有精品一区二区| 首页欧美精品中文字幕| 国产高清一区| 亚洲一区区二区| av日韩中文| 国产精品久久久久久久久久妞妞| 亚洲欧美日韩综合国产aⅴ| 日韩综合一区二区| 日韩在线黄色| 天堂中文在线播放| 国产成人精选| 合欧美一区二区三区| 日本一区二区三区视频在线看| 日韩精品视频网| 国产欧美日本| 久久久噜噜噜| 免费日韩av片| 国产精品一国产精品k频道56| 国产伦精品一区二区三区视频| 国产日本精品| 精品一区免费| 久久精品国产亚洲aⅴ| 蜜桃成人av| 欧美日韩一二三四| 99久久精品费精品国产| 日韩福利视频导航| 久久亚洲精精品中文字幕| 色老板在线视频一区二区| 久久国产福利| 国产欧美日韩精品一区二区免费| 日韩欧美中文在线观看| 日本欧美不卡| 日韩精品视频中文字幕| 日韩影院免费视频| 免费观看久久av| 欧美精品影院| 激情欧美日韩一区| 免费精品一区| 久久亚洲在线| 日本午夜精品久久久久| 久久国产亚洲| 成人va天堂| 影音先锋久久精品| 久久免费视频66| 视频在线观看一区| 精品免费在线| 久久午夜影视| 欧美精品一区二区三区精品| 91精品国产经典在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 激情久久中文字幕| 亚洲网站视频| 国产精品一区二区免费福利视频| 99精品视频在线观看免费播放| 国产精品久久久久av蜜臀| 蜜桃成人av| 捆绑调教美女网站视频一区| 婷婷色综合网| 日韩国产专区| 欧美日韩水蜜桃| 日韩影院精彩在线| 美女久久一区| 日韩av自拍| 免费在线观看不卡| 久久精品午夜| 久久激情综合网| 免费在线观看成人| 欧美日韩中文一区二区| 视频一区二区欧美| 婷婷成人综合| 国产真实久久| 中文字幕人成乱码在线观看| 麻豆精品蜜桃视频网站| 国产乱子精品一区二区在线观看 | 野花国产精品入口| 久久久久蜜桃| 亚洲韩日在线| 亚洲免费观看| 免费观看亚洲| 国产真实久久| 蜜芽一区二区三区| 蜜桃成人av| 今天的高清视频免费播放成人| 午夜av成人| 老鸭窝毛片一区二区三区| 日韩欧美在线精品| 国产精品免费大片| 日韩欧美精品| 亚洲免费中文| 欧美另类中文字幕| yellow在线观看网址| 1024精品久久久久久久久| 最新亚洲国产| 国产日韩精品视频一区二区三区| 国产激情欧美| 99视频精品免费观看| 久久精品主播| 国产精品3区| 热久久久久久| 黄色精品网站| 成人精品高清在线视频| 欧美亚洲综合视频| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美久久天堂| 久久久国产精品一区二区中文| 丁香婷婷久久| 国产精品一国产精品| 美女网站一区| 999国产精品| 精品国产成人| 午夜电影一区| 日韩中文字幕无砖| 正在播放日韩精品| 国产欧美日韩一区二区三区四区 | 精品三级久久久| 国内亚洲精品|