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.
JDK JRE JVM,JDK卸載與安裝
2.
Unity NavMeshComponents 學習小結
3.
Unity技術分享連載(64)|Shader Variant Collection|Material.SetPassFast
4.
爲什麼那麼多人用「ji32k7au4a83」作密碼?
5.
關於Vigenere爆0總結
6.
圖論算法之最小生成樹(Krim、Kruskal)
7.
最小生成樹 簡單入門
8.
POJ 3165 Traveling Trio 筆記
9.
你的快遞最遠去到哪裏呢
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.
敏感詞替換
>>更多相關文章<<