JAVA 敏感詞過濾
package me.mymilkbottles;
import org.apache.commons.lang.CharUtils;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public class SensitiveWordFilter {
private WordTree wordTree = new WordTree();
private static final String SENSITIVE_WORD_REPLACE = "***";
private class WordTree {
private Map<Character, WordTree> tree = new HashMap<Character, WordTree>();
private boolean isWordEndFlag;
public WordTree() {
}
public WordTree(boolean isWordEndFlag) {
this.isWordEndFlag = isWordEndFlag;
}
public boolean getIsWordEndFlag() {
return isWordEndFlag;
}
public void set(Character ch, WordTree wordTree) {
tree.put(ch, wordTree);
}
public WordTree get(Character ch) {
return tree.get(ch);
}
}
public SensitiveWordFilter addSensitiveWord (String sensitiveWord) {
WordTree wordTreeNode = wordTree;
for (int i = 0, len = sensitiveWord.length(); i < len; ++i) {
Character nowCharacter = sensitiveWord.charAt(i);
WordTree tempWordTreeNode = new WordTree(i == len - 1);
wordTreeNode.set(nowCharacter, tempWordTreeNode);
wordTreeNode = tempWordTreeNode;
}
return this;
}
public String sensitiveFilter(String filterText) {
StringBuilder afterFilterText = new StringBuilder();
int len = filterText.length();
int nowPosition = 0, testPosition, filterPosition;
while (nowPosition < len) {
WordTree wordTreeNode = wordTree;
Character nowCharacter = filterText.charAt(nowPosition);
WordTree tempWordTreeNode = wordTreeNode.get(nowCharacter);
if (tempWordTreeNode == null) {
afterFilterText.append(nowCharacter);
++nowPosition;
} else {
testPosition = nowPosition;
filterPosition = -1;
while (tempWordTreeNode != null) {
if (tempWordTreeNode.getIsWordEndFlag()) {
filterPosition = testPosition;
break;
} else {
while ((++testPosition) < len) {
nowCharacter = filterText.charAt(testPosition);
if (CharUtils.isAsciiAlphanumeric(nowCharacter) || (nowCharacter >= 0x4e00 && nowCharacter <= 0x9fbb)) {
break;
}
}
tempWordTreeNode = tempWordTreeNode.get(nowCharacter);
}
}
if (filterPosition != -1) {
afterFilterText.append(SENSITIVE_WORD_REPLACE);
nowPosition = filterPosition + 1;
} else {
afterFilterText.append(filterText.charAt(nowPosition));
++nowPosition;
}
}
}
return afterFilterText.toString();
}
public static void main(String[] args) {
SensitiveWordFilter sensitiveWordFilter = new SensitiveWordFilter();
String[] sensitiveWords =
new String[]{"色情", "暴力", "賭博", "上網", "通宵", "sb", "傻逼", "智障", "你媽"};
for (String sensitiveWord : sensitiveWords) {
sensitiveWordFilter.addSensitiveWord(sensitiveWord);
}
相關推薦
Java 敏感詞過濾,Java 敏感詞替換,Java 敏感詞工具類
blog rds log code ima 方法 www enter iteye Java 敏感詞過濾,Java 敏感詞替換,Java 敏感詞工具類 =========================== ?Copyright 蕃薯耀 2017年9月25日 http:
DFA演算法實現Java敏感詞過濾
敏感詞、文字過濾是一個網站必不可少的功能,如何設計一個好的、高效的過濾演算法是非常有必要的。前段時間我一個朋友(馬上畢業,接觸程式設計不久)要我幫他看一個文字過濾的東西,它說檢索效率非常慢。我把它程式拿過來一看,整個過程如下:讀取敏感詞庫、如果Ha
JAVA 敏感詞過濾
package me.mymilkbottles; import org.apache.commons.lang.CharUtils; import java.io.File; import java.util.HashMap; import java.ut
java敏感詞過濾(詞庫+演算法)高效率驗證
需求:使用者輸入一段文字,驗證是否包含敏感詞,以及具體的是哪些敏感詞,替換為*等....1.需要一個詞庫,我這裡就是一個從github下載的一個txt檔案。已轉存到百度網盤,點選下載詞庫,提取碼:tk3g2.DFA演算法,效能卓越,請放心使用,直接上java程式碼:packa
java HashMap實現中文分詞器 應用:敏感詞過濾實現
今天下午部門內部技術分享是分詞器演算法。這次的主講是大名鼎鼎的Ansj分詞器的作者-孫健。 作者簡介: Ansj分詞器作者 elasticsearch-sql(elasticsearch的sql外掛)作者,支援sql查詢 nlp-lang自然語言工具包發起人 NLPCN(自然語言處理
Java Web敏感詞過濾演算法
1.DFA演算法DFA演算法的原理可以參考 這裡 ,簡單來說就是通過Map構造出一顆敏感詞樹,樹的每一條由根節點到葉子節點的路徑構成一個敏感詞,例如下圖:程式碼簡單實現如下:public class TextFilterUtil { //日誌 private stat
Java利用DFA演算法實現敏感詞過濾
前言: 敏感詞文字過濾是一個網站必不可少的功能,如何設計一個好的、高效的過濾演算法是非常有必要的。作為一般開發人員來說首先考慮的肯定是簡單的匹配,這樣是可以實現功能,但效率比較慢,在高階一點的就是正則表示式,比前一個好一點,但終究還是一丘之貉,非常遺憾,兩種方法都不可取。當
java DFA 敏感詞過濾
@SuppressWarnings("unchecked") public class SensitiveWordUtils { /** * 只要匹配到一個就返回 */ public static final int
61 dfa 實現敏感詞過濾
引用 nbsp bsp 概念 pre clas logs code println 基本的概念 Class class=null 【只是在棧內存中有了指向,堆內存並沒有分配內存】 Class class=new Class()【棧內存中有了指向(引用),堆內存也分配了內存
PHP實現敏感詞過濾系統
trie樹 sel 重復 .html ole lang 最大 foreach header PHP實現敏感詞過濾系統 安裝說明 安裝PHP擴展 trie_filter,安裝教程 http://blog.41ms.com/post/39.html 安
5分鐘Serverless實踐 | 構建無服務器的敏感詞過濾後端系統
trab 平臺 ase lac mps creat base pen 服務器架構 前言 在上一篇“5分鐘Serverless實踐”系列文章中,我們介紹了什麽是Serverless,以及如何構建一個無服務器的圖片鑒黃Web應用,本文將延續這個話題,以敏感詞過濾為例,介紹如何構
JavaScript 版敏感詞過濾庫
考慮到太多的違禁詞彙,所以縮小化顯示,縮小到讓你看不清楚。如果想看清楚一點,還是去演示地址裡面看吧。消滅敏感詞是每個公民義不容辭的責任!你不站崗我不站崗,誰保衛咱祖國誰來保衛家!讀者們你們要是敢舉報,看我不砍死你! 安裝方法 # 安裝到當前專案 np
敏感詞過濾演算法:字首樹演算法
背景 平時我們在逛貼吧、牛客網的時候,我們經常可以看到一些形如 “***”的符號,通過上下文,我們也可以很容易猜到這些詞原來是罵人的話,只是被系統和諧了。那麼這是如何實現的呢?作為普通人,我們最先想到的一種辦法就是把所有敏感串存入一個列表中,然後使用者每發一條內容後臺就把該內容與敏感串列表
敏感詞過濾工具
SensitivewordEngine.java 敏感詞過濾工具類 package keyFilter; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.uti
Java敏感詞彙過濾
package cn.yzh.ws.utils; import java.io.*; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FileUtil
php 實現敏感詞過濾 - PHP擴充套件trie_filter
實現方法1 使用PHP擴充套件trie_filter 安裝:libiconv wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar zxvf libiconv-1.14.tar.gz cd libicon
【python 走進NLP】英文敏感詞過濾演算法改進版本
中文DFA演算法過濾敏感詞改進版本 # 中文DFA演算法過濾敏感詞改進版本 class Chinese_DFAFilter(): def __init__(self): self.keyword_chains = {} s
敏感詞過濾golang
用golang寫了敏感詞過濾的工具,主要用來檢測使用者暱稱中是否存在敏感詞,同時提供剔除轉移字元的功能。 可以先將敏感詞庫存放在一個map中,敏感詞可以參考這裡:https://github.com/fwwdn/sensitive-stop-words 將map和暱稱傳入,程
C#敏感詞過濾演算法實現
1.DFA演算法簡介DFA全稱為:Deterministic Finite Automaton,即確定有窮自動機。其特徵為:有一個有限狀態集合和一些從一個狀態通向另一個狀態的邊,每條邊上標記有一個符號,其中一個狀態是初態,某些狀態是終態。但不同於不確定的有限自動機,DFA中不
Spring MVC的使用技巧(APP驗證 加密/解密Json 敏感詞過濾)
APP服務端的Token驗證 通過攔截器對使用了 @Authorization 註解的方法進行請求攔截,從http header中取出token資訊,驗證其是否合法。非法直接返回401錯誤,合法將token對應的user key存入request中後繼續執行。具體實現程