当前位置: 首页 > 图文教程 > 网络编程 > ASP > asp智能脏话过滤系统v1.0

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

ASP 中的 asp智能脏话过滤系统v1.0


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 90 ::
收藏到网摘: n/a

功能比较不错的脏话过滤系统,就是代码太长了,具体算法大家可以自己研究下 <%
'**********************************************************
'*智能脏话过滤系统v1.0 * *
'*转载请保留版权信息,多谢 * 拉 *
'*调用方法:sayy=ND_say_what(sayy),sayy为内容输入 * 图 *
'*程序作者:阮丁远,(网名:柏拉图的程序) 版权所有 * 的 *
'*qq:657697290 * 序 *
'*最后修改:20080609 * 著 *
'*(struct,spring,,....net,www.ruanchen.com|强人工智能系统 2049年)还未开发基于分词数据库的形容词
,名词等归类的,和带自动优先级式分词,
'*(struct,spring,,....net,www.ruanchen.com|强人工智能系统 2049年)和xml多层式的字与字最大间隔设
置(精确到单个字与单个字的间隔,
'*(struct,spring,,....net,www.ruanchen.com|强人工智能系统 2049年)因为连续的单个字与单个字间可能
也有随机性空格) 及语义嵌套,递归式冗余纠错,和
'*(struct,spring,,....net,www.ruanchen.com|强人工智能系统 2049年)程序语义理解,人工神经元语义理
解的更高版本
'**********************************************************
function ND_say_what(sayyyyx)

'本代码使用说明:如 ivv=0,icc=0,zang_data(ivv,0,0)="操|日|靠|ri|cao|草
|kao",icc=icc+1,zang_data(ivv,icc,0)="他",zang_data(ivv,icc,1)=2,表示如果"操|日|靠|ri|cao|草
|kao"中的"操"字或"日"字或其他字 与 zang_data(ivv,icc,0)="他"中指定的"他"字相隔zang_data
(ivv,icc,1)=2指定的2个字的距离或小于2个字距离,就认为此语句为脏话,并自动过滤掉
'*的使用: zang_data(0,0,0)="去死妈",zang_data(0,1,0)="*"之类 表示只要存在"去死妈"这些字 就过
滤掉 ,而不用考虑字符距离等 ,这与zang_data(0,0,0)="去死妈",zang_data(0,1,0)=.....不存在 的情
况 的效果等效
' 一个英文的长度为1,一个中文的长度也算为1
' 对于 "杀死"两字, 则认为 "杀"字 与 "死"字 相差0个字符, "杀 死"两字中 也认为 "杀"字 与 "死"
字 相差0个字符,因为会自动忽略字与字间的空格

zang_len=999
zang_yufa_xiangguan_list_max=22
dim zang_data(999,22,2)

'初始化一切
for zang_lena=0 to zang_len-1
for zang_yufa_xiangguan_lena=0 to zang_yufa_xiangguan_list_max-1
zang_data(zang_lena,zang_yufa_xiangguan_lena,0)=""
zang_data(zang_lena,zang_yufa_xiangguan_lena,1)=2 '指定如果zang_data
(zang_lena,zang_yufa_xiangguan_lena,0)的字符串与其对应的后面的数组元素的字符串相隔几个长度或
相隔小于此指定的长度值的字符串时才认定为脏话
next
next
konggexx="
"&"$_kongge_$"&" "&"$_kongge_$"&" "&"$_kongge_$"&"<br>"&"$_kongge_$"&"<p>"&"$_kongge_$
"&"</p>"&"$_kongge_$"&","&"$_kongge_$"&"'"&"$_kongge_$"&"""&"$_kongge_$"&"="&"$_kongge_$"&"
="&"$_kongge_$"&"-"&"$_kongge_$"&"_"&"$_kongge_$"&"+"&"$_kongge_$"&"%"&"$_kongge_$"&"$"&"$_k
ongge_$"&"#"&"$_kongge_$"&"?"&"$_kongge_$"&"!"&"$_kongge_$"&"~"&"$_kongge_$"&"("&"$_kongge_$
"&")"&"$_kongge_$"&"<"&"$_kongge_$"&">"&"$_kongge_$"&"["&"$_kongge_$"&"]"&"$_kongge_$"&"{"&"
$_kongge_$"&"}"&"$_kongge_$"&":"&"$_kongge_$"&";"&"$_kongge_$"&"."&"$_kongge_$"&"/"&"$_kongg
e_$"&"\"&"$_kongge_$"&"^"&"$_kongge_$"&"*"&"$_kongge_$"&"@"&"$_kongge_$"&"&"&"$_kongge_$"&"|
" '指定所有空格性的字符,用$_kongge_$隔开,这里空格指定了英文空格和中文空格
heihack=" *** " '把脏话替换成什么


'======================================================
'脏话数据库v1.0-20080609,一切脏话的脏话数据库在下面:
ivv=0
icc=0
zang_data(ivv,0,0)="杀|sha|sa|干|gan" '如果 杀 和 死 字同时存在,且两字间相隔的字符数小于或
等于对应的zzang_data(aa,yy,1)指定的值,则认定此为脏话
zang_data(ivv,icc,0)="死|si|shi"
zang_data(ivv,icc,1)=0
icc=icc+1
zang_data(ivv,icc,0)="掉"
zang_data(ivv,icc,1)=0
icc=icc+1
zang_data(ivv,icc,0)="了"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="把|ba"
icc=icc+1
zang_data(ivv,icc,0)="杀|sha|sa|干" '把...... 杀 ,相隔5个或小于5个字符串
zang_data(ivv,icc,1)=5
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="去|qu"
icc=icc+1
zang_data(ivv,icc,0)="杀" '把....拉出 去 杀或 去 杀 了 ... ,相隔4个或小于4个字符串
zang_data(ivv,icc,1)=4
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="操|日|靠|ri|cao|草|kao|干|gan|gang|jie|jian|奸"
icc=icc+1
zang_data(ivv,icc,0)="你" '操你妈,操你吗 ,.....
zang_data(ivv,icc,1)=0
icc=icc+1
zang_data(ivv,icc,0)="ma|妈" '可能为 操nima ,操他ma,操tama,... 故其对应的zang_data(aa,yy,1)
指定为2
zang_data(ivv,icc,1)=2
icc=icc+1
zang_data(ivv,icc,0)="ni"
zang_data(ivv,icc,1)=0
icc=icc+1
zang_data(ivv,icc,0)="她" '可能为 操死她,操她,操si她 故其对应的zang_data(aa,yy,1)指定为2
zang_data(ivv,icc,1)=2
icc=icc+1
zang_data(ivv,icc,0)="他" '可能为 操死他,操他,操si他 故其对应的zang_data(aa,yy,1)指定为2
zang_data(ivv,icc,1)=2
icc=icc+1
zang_data(ivv,icc,0)="它" '可能为 操死它,操它,操si它 故其对应的zang_data(aa,yy,1)指定为2
zang_data(ivv,icc,1)=2
icc=icc+1
zang_data(ivv,icc,0)="ta" '可能为 操死ta,操ta,操sita 故其对应的zang_data(aa,yy,1)指定为2
zang_data(ivv,icc,1)=2
icc=icc+1
zang_data(ivv,icc,0)="娘|niang"
zang_data(ivv,icc,1)=2
icc=icc+1
zang_data(ivv,icc,0)="b|逼" '草你吗b
zang_data(ivv,icc,1)=2
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="我|wo"
icc=icc+1
zang_data(ivv,icc,0)="操|日|靠|ri|cao|草|kao|干|gan|gang|jie|jian|奸|杀|灭"
zang_data(ivv,icc,1)=0

'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="操|日|靠|ri|cao|草|kao|奸"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="去你妈|去你吗|去你ma"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="去死"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="你妈|你吗|你ma|你妈"
icc=icc+1
zang_data(ivv,icc,0)="b|逼"
zang_data(ivv,icc,1)=1 '你妈的b ,你妈b

'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="性"
icc=icc+1
zang_data(ivv,icc,0)="爱" '性 爱
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="做|zuo|作"
icc=icc+1
zang_data(ivv,icc,0)="爱|ai"
zang_data(ivv,icc,1)=1
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="做|zuo|作"
icc=icc+1
zang_data(ivv,icc,0)="爱|ai"
zang_data(ivv,icc,1)=1
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="a|毛|三级|日本"
icc=icc+1
zang_data(ivv,icc,0)="片|pian"
zang_data(ivv,icc,1)=2
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="av|性"
icc=icc+1
zang_data(ivv,icc,0)="工作者"
zang_data(ivv,icc,1)=20
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="日本"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="看|see"
icc=icc+1
zang_data(ivv,icc,0)="三级"
zang_data(ivv,icc,1)=3
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="找"
icc=icc+1
zang_data(ivv,icc,0)="小姐"
zang_data(ivv,icc,1)=2
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="晚上"
icc=icc+1
zang_data(ivv,icc,0)="小姐"
zang_data(ivv,icc,1)=12
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="傻|sha|sa|啥|s"
icc=icc+1
zang_data(ivv,icc,0)="b|比|逼"
zang_data(ivv,icc,1)=0
'-----------------------------

ivv=ivv+1
icc=0
zang_data(ivv,0,0)="s"
icc=icc+1
zang_data(ivv,icc,0)="b"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="变态"
icc=icc+1
zang_data(ivv,icc,0)="杀"
zang_data(ivv,icc,1)=15
'-----------------------------

ivv=ivv+1
icc=0
zang_data(ivv,0,0)="人"
icc=icc+1
zang_data(ivv,icc,0)="渣"
zang_data(ivv,icc,1)=0
'-----------------------------

ivv=ivv+1
icc=0
zang_data(ivv,0,0)="垃"
icc=icc+1
zang_data(ivv,icc,0)="圾"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="huan|huang|黄"
icc=icc+1
zang_data(ivv,icc,0)="色|se"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="ma|妈"
icc=icc+1
zang_data(ivv,icc,0)="b|比|逼"
zang_data(ivv,icc,1)=0
'-----------------------------

ivv=ivv+1
icc=0
zang_data(ivv,0,0)="搞|gao"
icc=icc+1
zang_data(ivv,icc,0)="b|比|逼"
zang_data(ivv,icc,1)=0
'-----------------------------
功能比较不错的脏话过滤系统,就是代码太长了,具体算法大家可以自己研究下
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="他|她|它"
icc=icc+1
zang_data(ivv,icc,0)="ma的|妈的|妈地|妈得"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="装"
icc=icc+1
zang_data(ivv,icc,0)="b|比|逼"
zang_data(ivv,icc,1)=0
'-----------------------------

ivv=ivv+1
icc=0
zang_data(ivv,0,0)="你妈|你吗|你ma|你妈"
icc=icc+1
zang_data(ivv,icc,0)="的"
zang_data(ivv,icc,1)=0
'-----------------------------

ivv=ivv+1
icc=0
zang_data(ivv,0,0)="神经病"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="有病|有毛病"
icc=icc+1
zang_data(ivv,icc,0)="啊|阿|a|吗"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="找死"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="想死"
icc=icc+1
zang_data(ivv,icc,0)="啊|阿|a|吗"
zang_data(ivv,icc,1)=4
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="想不想"
icc=icc+1
zang_data(ivv,icc,0)="死"
zang_data(ivv,icc,1)=4
'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="是不是"
icc=icc+1
zang_data(ivv,icc,0)="死"
zang_data(ivv,icc,1)=4

'-----------------------------
ivv=ivv+1
icc=0
zang_data(ivv,0,0)="拖出去"
icc=icc+1
zang_data(ivv,icc,0)="*"
zang_data(ivv,icc,1)=0


'=====end 脏话数据库=================================================


sayyssx=lcase(sayyyyx)
'第一层循环
for zang_lenav=0 to zang_len-1
aassdaks=trim(zang_data(zang_lenav,0,0))

if aassdaks<>"" then
aassdaksa=split(aassdaks,"|")
'第二层循环,针对 "dsf|2343|34234|df"之类中的各元素扫描
for aassdxsx=0 to ubound(aassdaksa)
sssaac=lcase(trim(aassdaksa(aassdxsx)))

have_di2cen=1
count_lllppt=0
'针对 如果 存在重复的多个类似的脏话,则do while ,直到过滤完
do while have_di2cen=1

count_lllppt=count_lllppt+1
if count_lllppt>9999 then exit do '防止自循环
have_di2cen=0


if instr(1,sayyssx,sssaac,1)<>0 then
posfd=instr(1,sayyssx,sssaac,1)
have_di2cen=1

'第三层循环
for zang_yufa_xiangguan_lenav=1 to zang_yufa_xiangguan_list_max-1
aassdakc=trim(zang_data(zang_lenav,zang_yufa_xiangguan_lenav,0))
aassdakcc=clng(zang_data(zang_lenav,zang_yufa_xiangguan_lenav,1))

need_n2=1

if aassdakc="" and zang_yufa_xiangguan_lenav=1 then
if posfd-1<1 then
sstrt=""
else
sstrt=mid(sayyssx,1,posfd-1)
end if
if posfd+len(sssaac)>len(sayyssx) then
enddt=""
else
enddt=mid(sayyssx,posfd+len(sssaac),len(sayyssx)-(posfd+len(sssaac))+1)
end if
sayyssx=sstrt&thzzzf&enddt
need_n2=0
exit for
end if

if aassdakc<>"" then
aassdakcyy=split(aassdakc,"|")

'第四层循环,针对 "dsf|2343|34234|df"之类中的各元素扫描
for aassdakcx=0 to ubound(aassdakcyy)
sssaacc=lcase(trim(aassdakcyy(aassdakcx)))
thzzzf=heihack
'--1--
if sssaacc="" and aassdakcx=0 and zang_yufa_xiangguan_lenav=1 then

if posfd-1<1 then
sstrt=""
else
sstrt=mid(sayyssx,1,posfd-1)
end if
if posfd+len(sssaac)>len(sayyssx) then
enddt=""
else
enddt=mid(sayyssx,posfd+len(sssaac),len(sayyssx)-(posfd+len(sssaac))+1)
end if
sayyssx=sstrt&thzzzf&enddt

need_n2=0
exit for
end if

'--2--
if sssaacc="*" then

if posfd-1<1 then
sstrt=""
else
sstrt=mid(sayyssx,1,posfd-1)
end if
if posfd+len(sssaac)>len(sayyssx) then
enddt=""
else
enddt=mid(sayyssx,posfd+len(sssaac),len(sayyssx)-(posfd+len(sssaac))+1)
end if
sayyssx=sstrt&thzzzf&enddt
need_n2=0
exit for
end if

'--3--
ttrrrue=0
for fdfdfd_scan=1 to aassdakcc+1
ttrrrue=ttrrrue+1
if posfd+len(sssaac)-1++len(sssaacc)+ttrrrue-1>len(sayyssx) then exit for

'以下用于忽略字与字间的空格性的字符,空格性的字符详见konggexx变量的值
kkkgeee=split(konggexx,"$_kongge_$")
for kkkgeeei=0 to ubound(kkkgeee)
if mid(sayyssx,posfd+len(sssaac)-1+ttrrrue,1)=kkkgeee(kkkgeeei) then
fdfdfd_scan=fdfdfd_scan-1
exit for
end if
next
if mid(sayyssx,posfd+len(sssaac)-1+ttrrrue,len(sssaacc))=sssaacc then
fdzi_pos=posfd+len(sssaac)-1+ttrrrue

if posfd-1<1 then
sstrt=""
else
sstrt=mid(sayyssx,1,posfd-1)
end if
if posfd+len(sssaac)>len(sayyssx) then
enddt=""
else
enddt=mid(sayyssx,posfd+len(sssaac),len(sayyssx)-(posfd+len(sssaac))+1)
end if
sayyssx=sstrt&thzzzf&enddt

new_fdzi_pos=fdzi_pos+(len(thzzzf)-len(sssaac))

if new_fdzi_pos-1<1 then
sstrt=""
else
sstrt=mid(sayyssx,1,new_fdzi_pos-1)
end if
if new_fdzi_pos+len(sssaacc)>len(sayyssx) then
enddt=""
else
enddt=mid(sayyssx,new_fdzi_pos+len(sssaacc),len(sayyssx)-(new_fdzi_pos+len(sssaacc))+1)
end if
sayyssx=sstrt&thzzzf&enddt
need_n2=0
exit for
end if
next

if need_n2=0 then exit for

'执行到这,说明是 第四层循环里 dsf|2343|34234|df之类中 的上一项未匹配,而继续下一项,否则已经跳
出本循环,这也就是need_n2变量的作用,当然也有可能再次进入 同一sssaac变量值的 本循环,如果
have_di2cen=1的话
next
end if
'执行到这说明第四层循环时 没找到匹配的脏话
if need_n2=0 then exit for
'执行到这,说明是 第三层循环里 数组元素中 的上一项未匹配,而继续下一项,否则已经跳出本循环,这也
就是need_n2变量的作用,当然也有可能再次进入 同一sssaac变量值的 本循环,如果have_di2cen=1的话
next

if need_n2=1 then '第三层循环 扫描到末尾,没找到匹配的脏话,不用再do while 了
exit do
end if
end if

loop

'第二层循环,针对 "dsf|2343|34234|df"之类中的各元素扫描
next

end if

'第一层循环
next
ND_say_what=sayyssx
end function
'end 智能脏话过滤系统v1.0

%>

<br>
<br><br>
智能脏话过滤系统v1.0 ----by 柏拉图的程序,qq657697290<hr><br>
<form action=a.asp method=post>

<textarea name=aaas cols=50 rows=10><% if request("aaas")="" then%>
你妈d的,我草,2334234234,3434
<%else%>
<%=trim(request("aaas"))%>
<%end if%>
</textarea>
<br>
<input type=submit value="开始智能脏话过滤">

<br><br>
<hr>过滤后的输出:<br>
<font color=#ff0000>
<%
response.write ND_say_what(request("aaas"))
%>
</font>