1. 程式人生 > >JAVA 敏感詞過濾

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中後繼續執行。具體實現程