JavaShuo
欄目
標籤
DFA算法過濾敏感詞,替換爲*
時間 2019-11-19
標籤
dfa
算法
過濾
敏感
替換
简体版
原文
原文鏈接
import
java.io.InputStream;
import
java.io.UnsupportedEncodingException;
import
java.nio.ByteBuffer;
import
java.util.ArrayList;
import
java.util.Enumeration;
import
java.util.List;
import
java.util.Properties;
public
class
test {
/**
* 根節點
*/
private
TreeNode rootNode =
new
TreeNode();
/**
* 關鍵詞緩存
*/
private
ByteBuffer keywordBuffer = ByteBuffer.allocate(
1024
);
/**
* 關鍵詞編碼
*/
private
String charset =
"utf-8"
;
/**
* 建立DFA
* @param keywordList
* @throws UnsupportedEncodingException
*/
public
void
createKeywordTree(List<String> keywordList)
throws
UnsupportedEncodingException{
for
(String keyword : keywordList) {
if
(keyword ==
null
)
continue
;
keyword = keyword.trim();
byte
[] bytes = keyword.getBytes(charset);
TreeNode tempNode = rootNode;
for
(
int
i =
0
; i < bytes.length; i++) {
int
index = bytes[i] &
0xff
;
TreeNode node = tempNode.getSubNode(index);
if
(node ==
null
){
node =
new
TreeNode();
tempNode.setSubNode(index, node);
}
tempNode = node;
if
(i == bytes.length -
1
){
tempNode.setKeywordEnd(
true
);
}
}
}
}
public
String searchKeyword(String text)
throws
UnsupportedEncodingException{
return
searchKeyword(text.getBytes(charset));
}
public
String searchKeyword(
byte
[] bytes){
StringBuilder words =
new
StringBuilder();
if
(bytes ==
null
|| bytes.length ==
0
){
return
words.toString();
}
TreeNode tempNode = rootNode;
int
rollback =
0
;
int
position =
0
;
while
(position < bytes.length) {
int
index = bytes[position] &
0xFF
;
keywordBuffer.put(bytes[position]);
tempNode = tempNode.getSubNode(index);
if
(tempNode ==
null
){
position = position - rollback;
rollback =
0
;
tempNode = rootNode;
keywordBuffer.clear();
}
else
if
(tempNode.isKeywordEnd()){
keywordBuffer.flip();
for
(
int
i =
0
; i <= rollback; i++) {
bytes[position-i] =
42
;
}
keywordBuffer.limit(keywordBuffer.capacity());
rollback =
1
;
}
else
{
rollback++;
}
position++;
}
String result =
null
;
try
{
result =
new
String(bytes,
"utf-8"
);
}
catch
(Exception e) {
e.printStackTrace();
}
return
result;
}
public
void
setCharset(String charset) {
this
.charset = charset;
}
}
[java]
view plain
copy
import
java.util.ArrayList;
import
java.util.List;
public
class
TreeNode {
private
static
final
int
NODE_LEN =
256
;
/**
* true 關鍵詞的終結 ; false 繼續
*/
private
boolean
end =
false
;
private
List<TreeNode> subNodes =
new
ArrayList<TreeNode>(NODE_LEN);
public
TreeNode(){
for
(
int
i =
0
; i < NODE_LEN; i++) {
subNodes.add(i,
null
);
}
}
/**
* 向指定位置添加節點樹
* @param index
* @param node
*/
public
void
setSubNode(
int
index, TreeNode node){
subNodes.set(index, node);
}
public
TreeNode getSubNode(
int
index){
return
subNodes.get(index);
}
public
boolean
isKeywordEnd() {
return
end;
}
public
void
setKeywordEnd(
boolean
end) {
this
.end = end;
}
}
相關文章
1.
DFA算法實現敏感詞過濾
2.
敏感詞過濾-DFA算法
3.
算法-DFA算法-敏感詞過濾算法(OC、Swift、Python)
4.
Java過濾敏感詞算法--DFA算法
5.
敏感詞過濾算法
6.
Java實現敏感詞過濾 - DFA算法
7.
基於DFA算法實現的敏感詞過濾
8.
java實現敏感詞過濾(DFA算法)
9.
Java利用DFA算法實現敏感詞過濾
10.
敏感詞替換
更多相關文章...
•
XML DOM 替換節點
-
XML DOM 教程
•
XSD 元素替換(Element Substitution)
-
XML Schema 教程
•
算法總結-廣度優先算法
•
算法總結-深度優先算法
相關標籤/搜索
dfa
替換
過濾
敏感
過敏
換算
詞法
可替換
全局替換
PHP 7 新特性
PHP教程
NoSQL教程
算法
計算
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
「插件」Runner更新Pro版,幫助設計師遠離996
2.
錯誤 707 Could not load file or assembly ‘Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKe
3.
Jenkins 2018 報告速覽,Kubernetes使用率躍升235%!
4.
TVI-Android技術篇之註解Annotation
5.
android studio啓動項目
6.
Android的ADIL
7.
Android卡頓的檢測及優化方法彙總(線下+線上)
8.
登錄註冊的業務邏輯流程梳理
9.
NDK(1)創建自己的C/C++文件
10.
小菜的系統框架界面設計-你的評估是我的決策
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
DFA算法實現敏感詞過濾
2.
敏感詞過濾-DFA算法
3.
算法-DFA算法-敏感詞過濾算法(OC、Swift、Python)
4.
Java過濾敏感詞算法--DFA算法
5.
敏感詞過濾算法
6.
Java實現敏感詞過濾 - DFA算法
7.
基於DFA算法實現的敏感詞過濾
8.
java實現敏感詞過濾(DFA算法)
9.
Java利用DFA算法實現敏感詞過濾
10.
敏感詞替換
>>更多相關文章<<