成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術(shù)文章
文章詳情頁

基于java實(shí)現(xiàn)DFA算法代碼實(shí)例

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

DFA簡介

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

直接代碼:

敏感詞實(shí)體類

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; // 用來按照相應(yīng)的格式保存敏感詞庫數(shù)據(jù) Map nowMap = null; // 用來輔助構(gòu)建敏感詞庫 Map<String, String> newWorMap = null; // 使用一個(gè)迭代器來循環(huán)敏感詞集合 Iterator<String> iterator = keyWordSet.iterator(); while (iterator.hasNext()) { key = iterator.next(); // 等于敏感詞庫,HashMap對象在內(nèi)存中占用的是同一個(gè)地址,所以此nowMap對象的變化,sensitiveWordMap對象也會(huì)跟著改變 nowMap = sensitiveWordMap; for (int i = 0; i < key.length(); i++) {// 截取敏感詞當(dāng)中的字,在敏感詞庫中字為HashMap對象的Key鍵值char keyChar = key.charAt(i);// 判斷這個(gè)字是否存在于敏感詞庫中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;}// 如果該字是當(dāng)前敏感詞的最后一個(gè)字,則標(biāo)識(shí)為結(jié)尾字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; /** * 敏感詞庫敏感詞數(shù)量 * * @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; } /** * 獲取敏感詞內(nèi)容 * * @param txt * @param matchType * @return 敏感詞內(nèi)容 */ 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; } /** * 替換敏感詞內(nèi)容 * */ private static String getReplaceChars(String replaceChar, int length) { String resultReplace = replaceChar; for (int i = 1; i < length; i++) { resultReplace += replaceChar; } return resultReplace; } /** * 檢查敏感詞數(shù)量 * */ public static int checkSensitiveWord(String txt, int beginIndex, int matchType) { boolean flag = false; // 記錄敏感詞數(shù)量 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++;// 判斷是否是敏感詞的結(jié)尾字,如果是結(jié)尾字則判斷是否繼續(xù)檢測if ('1'.equals(nowMap.get('isEnd'))) { flag = true; // 判斷過濾類型,如果是小過濾則跳出循環(huán),否則繼續(xù)循環(huán) if (SensitivewordUtils.minMatchTYpe == matchType) { break; }} } else {break; } } if (!flag) { matchFlag = 0; } return matchFlag; } /** * 敏感詞匯對應(yīng)個(gè)數(shù) * 返回 '關(guān)鍵字'='關(guān)鍵字個(gè)數(shù)' * */ 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數(shù)組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) ;

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲自拍偷拍av| 国产.欧美.日韩| 国产精品综合在线视频| 美女精品国产| 一区二区三区电影在线播| 黄色av成人| 国产日本欧美一区二区| 成人激情小说网站| 日韩无一区二区| 免费观看91视频大全| 国产日韩欧美三区| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩精品一本二本三本| 国产无遮挡一区二区三区毛片日本| 成人免费看片app下载| 欧美卡1卡2卡| 狠狠色综合色综合网络| 亚洲女优在线| 亚洲午夜一二三区视频| 日韩亚洲国产欧美| 亚洲一线二线三线视频| 国产精品免费看| 一区二区在线观看免费视频播放| 在线观看一区视频| 国产精品免费视频观看| 国产主播一区| 亚洲色图在线看| 国产一区二区高清| 天天色 色综合| 色呦呦国产精品| 日日摸夜夜添夜夜添精品视频| 色噜噜偷拍精品综合在线| 性感美女久久精品| 久久精品麻豆| 美女一区二区视频| 欧美三区在线观看| 国产精品一区二区三区网站| 欧美成人精品高清在线播放 | 丁香啪啪综合成人亚洲小说| 久久日一线二线三线suv| 欧美日韩系列| 亚洲精品一二三区| 亚洲中字黄色| 日本成人在线电影网| 91.xcao| 91视频com| 亚洲欧美国产77777| 一本色道综合亚洲| 国产98色在线|日韩| 久久久99久久| 在线播放一区| 日韩主播视频在线| 欧美伦理视频网站| 成人国产亚洲欧美成人综合网| 国产亚洲欧洲997久久综合 | 亚洲欧美一区二区在线观看| 性高湖久久久久久久久| 美腿丝袜亚洲一区| 久久亚洲精品小早川怜子| 国内视频一区| 日韩精品一二三四| 91精品久久久久久久91蜜桃| 94-欧美-setu| 亚洲一区二区影院| 精品视频在线看| 99久久精品免费精品国产| 亚洲欧美乱综合| 欧美亚洲精品一区| youjizz国产精品| 国产精品久线观看视频| 久久精品天堂| 成人理论电影网| 亚洲乱码中文字幕综合| 老司机午夜精品视频在线观看| 国产精品91xxx| 亚洲欧洲一区二区三区| 久久久久久一区二区| 国产大陆亚洲精品国产| 欧美国产精品v| 男人的天堂亚洲| 国产精品456| 国产精品拍天天在线| 在线免费观看一区| 色综合天天综合给合国产| 亚洲自拍偷拍av| 日韩精品在线网站| 国产精品有限公司| 国产毛片精品国产一区二区三区| 欧美极品aⅴ影院| 色av成人天堂桃色av| 成人午夜伦理影院| 亚洲图片有声小说| 精品噜噜噜噜久久久久久久久试看| 亚洲欧洲另类| 久久精品理论片| 日本一区二区三区在线观看| 久久伊人亚洲| 99精品国产热久久91蜜凸| 亚洲一二三四久久| 日韩一区二区三区免费看 | 国产不卡高清在线观看视频| 1区2区3区国产精品| 欧美亚洲尤物久久| 伊大人香蕉综合8在线视| 久久99精品网久久| 亚洲视频在线观看一区| 91精品国产综合久久久久久| 激情欧美丁香| 国产一区二区三区国产| 亚洲乱码精品一二三四区日韩在线| 欧美裸体一区二区三区| 国产欧美综合一区二区三区| 成人性生交大片免费| 婷婷中文字幕综合| 久久色视频免费观看| 日本久久电影网| 国产精品成人观看视频免费| 久久99在线观看| 亚洲激情六月丁香| 久久婷婷国产综合精品青草 | 欧美日韩国产高清一区二区| 一区二区三区福利| 欧美在线网址| 国产精品18久久久久久久久| 亚洲精品大片www| 久久久蜜桃精品| 欧美日韩你懂得| 久久久久久穴| 一区在线视频| 99国产精品视频免费观看| 久久精品免费看| 亚洲一二三四久久| 中文字幕一区二区三中文字幕| 精品国产91九色蝌蚪| 欧美少妇bbb| 国产伦精品一区| 亚洲小说区图片区| 91看片淫黄大片一级在线观看| 国产精品一区二区免费不卡| 丝袜脚交一区二区| 日韩美女久久久| 亚洲国产精品精华液ab| 日韩欧美高清一区| 在线观看视频一区二区 | 亚洲高清在线观看一区| av成人老司机| 国产精品夜夜爽| 免费在线一区观看| 亚洲制服丝袜av| 国产精品动漫网站| 久久免费看少妇高潮| 日韩欧美久久久| 69堂亚洲精品首页| 欧美猛男男办公室激情| 欧美主播一区二区三区美女| 一区二区三区你懂的| 欧美国产三级| a级高清视频欧美日韩| 免费精品视频在线| 亚洲国产精品一区二区久久恐怖片| 国产精品福利在线播放| 久久综合五月天婷婷伊人| 日韩三级在线观看| 欧美一区二区免费| 欧美午夜片在线观看| 久久午夜影视| 毛片一区二区| 亚洲中字在线| 免费在线国产精品| 久久一区激情| 色婷婷av一区二区三区之一色屋| 国产精品久久久一区二区三区| 亚洲国产精品第一区二区| 女人香蕉久久**毛片精品| 99久久99久久精品国产片果冻 | 日韩有码一区二区三区| 手机精品视频在线观看| 亚洲va欧美va人人爽午夜| 亚洲一区视频在线| 亚洲资源在线观看| 亚洲18女电影在线观看| 亚洲动漫第一页| 亚洲国产裸拍裸体视频在线观看乱了| 一级中文字幕一区二区| 一个色妞综合视频在线观看| 夜夜嗨av一区二区三区中文字幕| 欧美另类久久久品| 欧美日韩美少妇| 7777精品伊人久久久大香线蕉的| 91精品国产综合久久精品性色 | 亚洲精品日韩一| 尤物视频一区二区| 一区二区三区av电影| 亚洲va韩国va欧美va精品| 午夜精品国产更新| 美女任你摸久久| 国产精品18久久久| av亚洲精华国产精华| 色综合天天综合给合国产| 午夜亚洲福利|