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

  <%

  '**********************************************************

  '*智能脏话过滤系统v1.0       *    *

  '*转载请保留版权信息,多谢                        *   拉   *

  '*调用方法:sayy=ND_say_what(sayy),sayy为内容输入 *   图   *

  '*程序作者:阮丁远,(网名:柏拉图的程序) 版权所有   *   的   *

  '*qq:657697290                                   *   序   *

  '*最后修改:20080609                              *   著   *

  '*(struct,spring,,....net,www.glzy8.com|强人工智能系统  2049年)还未开发基于分词数据库的形容词

  ,名词等归类的,和带自动优先级式分词,

  '*(struct,spring,,....net,www.glzy8.com|强人工智能系统  2049年)和xml多层式的字与字最大间隔设

  置(精确到单个字与单个字的间隔,

  '*(struct,spring,,....net,www.glzy8.com|强人工智能系统  2049年)因为连续的单个字与单个字间可能

  也有随机性空格) 及语义嵌套,递归式冗余纠错,和

  '*(struct,spring,,....net,www.glzy8.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>