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.
No provider available from registry 127.0.0.1:2181 for service com.ddbuy.ser 解決方法
2.
Qt5.7以上調用虛擬鍵盤(支持中文),以及源碼修改(可拖動,水平縮放)
3.
軟件測試面試- 購物車功能測試用例設計
4.
ElasticSearch(概念篇):你知道的, 爲了搜索…
5.
redux理解
6.
gitee創建第一個項目
7.
支持向量機之硬間隔(一步步推導,通俗易懂)
8.
Mysql 異步複製延遲的原因及解決方案
9.
如何在運行SEPM配置嚮導時將不可認的複雜數據庫密碼改爲簡單密碼
10.
windows系統下tftp服務器使用
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
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.
敏感詞替換
>>更多相關文章<<