資源簡介
高效敏感詞過濾JAVA實現(DFA算法) 5000字2ms
節點 + 2進制標識(節省空間/提高查詢效率)
附源碼、注釋,附帶專業敏感詞庫(3396個敏感詞)
看得上就拿去用,替換下一兩處util方法、改個路徑即可
不求什么,用得好的話,記得有那么一個人提供就夠了。
如遇問題,歡迎交流。 QQ 463550192
普通PC測試結果: 2015-5-1
加載時間 : 41542826ns
加載時間 : 41ms
解析字數 : 5000
解析時間 : 2295131ns
解析時間 : 2ms
代碼片段和文件信息
package?com.towell.carman.common.sensitive;
/**
?*?功不唐捐
?*?@author?龐健松?~?2014年11月6日?下午6:13:37
?*/
public?class?FilterSet{
private?final?long[]?elements;
public?FilterSet()?{
?elements?=?new?long[1?+?(65535?>>>?6)];
}
public?void?add(final?int?no)?{
elements[no?>>>?6]?|=?(1L?<(no?&?63));
}
public?void?add(final?int...?no)?{
for(int?currNo?:?no)
elements[currNo?>>>?6]?|=?(1L?<(currNo?&?63));
}
public?void?remove(final?int?no)?{
elements[no?>>>?6]?&=?~(1L?<(no?&?63));
}
/**
?*?
?*?@param?no
?*?@return?true:添加成功 false:原已包含
?*/
public?boolean?addAndNotify(final?int?no)?{
int?eWordNum?=?no?>>>?6;
long?oldElements?=?elements[eWordNum];
elements[eWordNum]?|=?(1L?<(no?&?63));
boolean?result?=?elements[eWordNum]?!=?oldElements;
// if?(result)
// size++;
return?result;
}
/**
?*?
?*?@param?no
?*?@return?true:移除成功 false:原本就不包含
?*/
public?boolean?removeAndNotify(final?int?no)?{
int?eWordNum?=?no?>>>?6;
long?oldElements?=?elements[eWordNum];
elements[eWordNum]?&=?~(1L?<(no?&?63));
boolean?result?=?elements[eWordNum]?!=?oldElements;
// if?(result)
// size--;
return?result;
}
public?boolean?contains(final?int?no)?{
????????return?(elements[no?>>>?6]?&?(1L?<(no?&?63)))?!=?0;
????}
public?boolean?containsAll(final?int...?no)?{
if(no.length==0)
return?true;
for(int?currNo?:?no)
if((elements[currNo?>>>?6]?&?(1L?<(currNo?&?63)))?==?0)
return?false;
return?true;
}
/**
?*?不如直接循環調用contains
?*?@param?no
?*?@return
?*/
public?boolean?containsAll_ueslessWay(final?int...?no)?{
long[]?elements?=?new?long[this.elements.length];
for(int?currNo?:?no){
elements[currNo?>>>?6]?|=?(1L?<(currNo?&?63));
}//這一步執行完跟循環調用contains差不多了
for?(int?i?=?0;?i? if?((elements[i]?&?~this.elements[i])?!=?0)
return?false;
return?true;
}
/**
?*?目前沒有去維護size,每次都是去計算size
?*?@return
?*/
public?int?size()?{
int?size?=?0;
for?(long?element?:?elements)
size?+=?Long.bitCount(element);
return?size;
}
public?static?void?main(String[]?args)?{
FilterSet?oi?=?new?FilterSet();
System.out.println(oi.elements.length);
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????????539??2015-05-01?21:44??readme.txt
?????目錄???????????0??2015-05-01?20:59??sensitive\
?????文件????????2420??2015-04-30?20:05??sensitive\FilterSet.java
?????文件???????16562??2015-05-01?21:06??sensitive\WordFilter.java
?????文件????????1628??2015-05-01?19:27??sensitive\WordNode.java
?????文件???????41791??2015-05-28?21:19??word.txt
評論
共有 條評論