MyException - 我的异常网
当前位置:我的异常网» Java Web开发 » 脏字过滤有关问题

脏字过滤有关问题

www.MyException.Cn  网友分享于:2013-03-08  浏览:42次
脏字过滤问题
我想在java类中写一个脏字过滤类,现在已经能过滤了,但是例如这个功能还没有实现:我想过滤 "法轮功 ", "学习法轮功 "中的 "法轮功 "要过滤,但是 "拒绝法轮功 "中的 "法轮功 "就不能过滤,请各位高手帮帮忙,给个例子!!

------解决方案--------------------
这个涉及语义分析...我晕,一个简单的类没法做到,

给一种简单的解决方案吧:定义组合。
比如定义A+B
A:学习/接收/宣传
B:法轮功/法轮大法

进行这样的组合过滤
------解决方案--------------------
^_^,正解在此!

if (s.equals( "脏 "))
{
// 过滤
}
else
{
// 不过滤
}
------解决方案--------------------
我写了一个脏字组合过滤的程序,不过是asp写的,看能否借鉴
(原文发表于:http://blog.randem.cn/20071118/filter-asp-instr-xor/ )

近日越来越多非法/低俗的信息在大跳蚤深圳二手市场(http://www.datiaozao.cn)网站发表,在这种大的信息交互的平台进行人工审核又几乎是不可能,因此极有可能被网监/信息部门警告,在客户强烈要求下,我只有补写了一个发布信息时的过滤的过程,来降低这种几率.程序是asp开发的,因为单篇的信息不是很大,所以采用了instr()函数来过滤(据说instr函数最大只能处理20k的数据),通过split来分割所定义脏字串. 用 Xor 异或 运算来处理.

程序代码如下.

‘************************************************
‘* 函数 FilterTxt (StrTxt)
‘* 信息发布敏感词语过滤函数
‘* 程序发布于: http://blog.randem.cn
‘* 如果含有脏字,返回逻辑值False,否则返回True
‘*************************************************
Function FilterTxt(StrTxt)
 Dim BlackTxt,FilterArray,Str,Word,Txt,I,J,K
 BlackTxt = “手机@窃听:定位:跟踪|三@唑@仑|迷:醚@魂:烟:药|走私”
 if IsNull(StrTxt) or StrTxt=”" then
response.write “<div style=’margin : 4px 8px ; padding:5px ; background-color : #f0f0f0 ; border:#dddddd 1 solid’>没有输入内容</div>”
 else 
FilterArray = Split(BlackTxt,”|”) ’划分过滤组 
For I=0 to UBOUND(FilterArray)
NoBlackTxt = False
Str = Split(FilterArray(I),”@”) ‘划分字符串 @间隔

if Ubound(Str)>0 then ‘过滤组中超过一个以上字串
For J=0 to Ubound(Str)
Word = Split(Str(J),”:”) ‘划分字串中的近似词 :间隔

If UBound(Word)>0 Then ‘字串中超过一个以上近似词
For K=0 To UBound(Word)
NoBlackTxt = False
if Instr(StrTxt,Word(K))>0 then
NoBlackTxt=NoBlackTxt Xor False 

Exit For
else
NoBlackTxt= True
end If
Next
If NoBlackTxt= True Then Exit For
Else ’字串中只有一个近似词
if Instr(StrTxt,Str(J))>0 then
NoBlackTxt=NoBlackTxt Xor False
else
NoBlackTxt= True
end If
End If
Next
Else ‘过滤组中只有一个字串
if Instr(StrTxt,FilterArray(I))>0 then
NoBlackTxt= NoBlackTxt Xor False
else
NoBlackTxt= True
end if

end if
if NoBlackTxt= True then
FilterTxt = True
Else
FilterTxt = False ‘返回函数值
Exit for
end if
Next

End if

End Function

过滤组用 ‘|’ 划分, 如:A|B|C 三个过滤组

进一步,过滤组中的字符串可以组合通过‘@’ 分割, 比如含有 ‘A’ 和 ‘B’ 同时存在才进行处理 写法: A@B|C|D . 支持超过2个以上的脏字组合验证: A@B@C|D

再进一步,有些人很狡猾,用别字替代, 这时候需要再进行一次验证,加入了 ‘:’区分的近似词处理. 写法 A:a@B:b@D:d:T|E这里的A:a@B:b@D:d:T 过滤组就 限制了 含有: ABD,ABd,ABT,AbD,Abd,AbT… 的信息的出现,一条过滤组限制了多个字符的出现.

应用时可以直接通过返回值来进行要求审核,或者直接限制信息的发布. 目前这个过滤过程已经在www.datiaozao.cn 应用了,大家可以去测试. (手机@窃听:定位:跟踪) 手机 跟踪 ; 手机 定位 ;手机 窃听 的组合都拒绝发布.

延伸设计:我想深一步应该可以在不同过滤组之间加一个处理等级的返回值A=-1|C=0|D=1 返回-1就是拒绝发表 ,返回0就是可以发表,需要等待审核,其他的比如 1就是直接替换成处理. 这样的话过滤处理更灵活.


文章评论

程序员必看的十大电影
程序员必看的十大电影
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
一个程序员的时间管理
一个程序员的时间管理
每天工作4小时的程序员
每天工作4小时的程序员
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
代码女神横空出世
代码女神横空出世
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
总结2014中国互联网十大段子
总结2014中国互联网十大段子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
我的丈夫是个程序员
我的丈夫是个程序员
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
如何成为一名黑客
如何成为一名黑客
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员和编码员之间的区别
程序员和编码员之间的区别
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我是如何打败拖延症的
我是如何打败拖延症的
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
 程序员的样子
程序员的样子
老程序员的下场
老程序员的下场
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员的鄙视链
程序员的鄙视链
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
漫画:程序员的工作
漫画:程序员的工作
编程语言是女人
编程语言是女人
10个调试和排错的小建议
10个调试和排错的小建议
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
旅行,写作,编程
旅行,写作,编程
那些争议最大的编程观点
那些争议最大的编程观点
程序员都该阅读的书
程序员都该阅读的书
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为什么程序员都是夜猫子
为什么程序员都是夜猫子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有