纯脚本, 给你的网站添加一个轻量级中文分词系统

站内搜索是一个网站重要的组成部份, 一个强大的站内搜索能令访客更快捷的找到所需的内容, 同时保证搜索的质量和结果。目前,大部份主流CMS均提供了站内搜索模块,部份还提供了模糊查询功能,但由于普遍缺乏中文分词系统,造成搜索结果不理想。对于被搜索引擎宠坏的访问者,不要指望他们会以空格或其它方法来区分关键词。这样,由于无法很好的搜索到相关信息,站内搜索几乎成为鸡肋。

虽然基于.net或asp组件有很多分词解决方案,但对于中小网站而言,由于主流的平台仍是ASP/PHP,这样要使用分词付出的代价将相当高昂。有没有完全通过脚本的中文分词解决方案呢?

这里,就提供一个完全免费的解决方法,它甚至可以不在你的服务器上运行,直接在客户端完成分词过程,而你的服务器端,则只需处理分词的结果并进行模糊搜索。

脚本采用了VBScript,对于ASP系统可以非常方便的转换为服务器脚本,这样便无缝的与现有网站程序对接。当然,这会占用一些服务器的资源。既然是轻量级应用,那当然是把系统开销降至最低为目的。

源代码如下

< script  language =VBScript >
//create by e2web@e2web.cn
Function urldecoding(vstrin)
    dim i,strreturn,strSpecial
    strSpecial 
= "!""#$%&'()*+,/:;<=>?@[]^`{|}~%"
    strreturn 
= ""
    
for i = 1 to len(vstrin)    
        thischr 
= mid(vstrin,i,1)
        
if thischr="%" then
            intasc
=eval("&h"+mid(vstrin,i+1,2))
            
if instr(strSpecial,chr(intasc))>0 then
                strreturn
= strreturn & chr(intasc)
                i
=i+2
            
else
                intasc
=eval("&h"+mid(vstrin,i+1,2)+mid(vstrin,i+4,2))
                strreturn
= strreturn & chr(intasc)
                i
=i+5
            end 
if
        
else
            
if thischr="+" then
                strreturn
= strreturn & " "
            
else
                strreturn
= strreturn & thischr
            end 
if
        end 
if
    next
    urldecoding 
= strreturn
end Function

Function bytes2BSTR(vIn)
    strReturn 
= ""
    For i 
= 1 To LenB(vIn)
        ThisCharCode 
= AscB(MidB(vIn,i,1))
        If ThisCharCode 
< &H80 Then
            strReturn 
= strReturn & Chr(ThisCharCode)
        Else
            NextCharCode 
= AscB(MidB(vIn,i+1,1))
            strReturn 
= strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            i 
= i + 1
        End If
    Next
    bytes2BSTR 
= strReturn
End Function

Function GetURL()
 set XmlHttp 
= CreateObject("Microsoft.XMLHTTP")
 XmlHttp.Open 
"GET""http://www.baidu.com/s?word="+search.str.value, false 
 XmlHttp.setRequestHeader 
"Content-Type","text/XML" 
 XmlHttp.Send
 
 dim html 
 html 
= bytes2BSTR(XmlHttp.responseBody)
 
 
if instr(html,"http://cache.baidu.com/c?word=")>0 then
    html
=split(html,"<a href=""http://cache.baidu.com/c?word=")(1)
    html
=split(html,"&url=http")(0)
    html
=replace(urldecoding(html),";"," ")
end 
if
search.action
="http://download.pchome.net/php/search.php?searchstr="+html
search.submit()

End Function

Function s()
  search.action
="http://download.pchome.net/php/search.php?searchstr="+search.str.value
  search.submit()
End Function

</ script >

< Form  name ="search"  method ="POST" >
        
< p >< input  type ="text"  name ="str"  size ="26"  value ="图像处理软件" >
    
< input  type ="submit"  value ="分词搜索"  name ="B1"  onclick =GetURL() > &nbsp; < input  type ="submit"  value ="普通搜索"  name ="B2"  onclick =s() ></ Form >

程序原理非常简单,在这里需要通过XMLHTTP调用了百度的快照分词结果,当然,也可以换成其它具有类似功能的搜索引擎,如YAHOO。如搜索“图像处理软件”,那么通过百度将返回分词后的字符串“图像 处理 软件”,演示采用了PCHOME的下载搜索,结果显而易见,分词后搜索结果比未分词时增加了10多条记录,而对于用户来说,他只需要输入想查询的关键词就可以了。你可以适当更改代码,如判断用户是否输了空格,以确定是用机器分词还是人工分词来进行搜索。

接下来,只需将代码嵌入你的网站,并设置好相应的查询URL,那么你的网站也将拥有一个强大的分词搜索系统了,当然,前提是你现有的搜索模块已具备多关键词模糊查询功能。

也许很多人对这种投机的方式不感冒,同时这种方式在实际使用中也会有种种限制,但用如此低的成本获取更好的用户体验,为什么不试试呢。不过,对于有开发能力的网站管理者,可能更愿意开发一个完全属于自己的分词模块,我在以后的环节,会继续提供纯脚本和字典来实现中文分词的思路。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值