网站源码下载PR查询短网址
首页编程数据库网页图形冲浪邮件下载浏览器QQ系统办公软件站长安全手机邮件认证组网通信


网站首页 -> 网络编程 -> ASP技巧
中文分词和TF-IDF

发表日期:2009-7-8


  中文分词(Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。

  TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。在搜索、文献分类和其他相关领域有广泛的应用。

  TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数。IDF反文档频率(Inverse Document Frequency)的主要思想是:如果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。

  使用TF*IDF可以计算某个关键字在某篇文章里面的重要性,因而识别这篇文章的主要含义,实现计算机读懂文章的功能。

  常见中文分词开源项目:

  SCWS:

  Hightman开发的一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的切分成词。采用的是采集的词频词典,并辅以一定的专有名称,人名,地名,数字年代等规则识别来达到基本分词,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些小型搜索引擎、关键字提取等场合运用。45Kb左右的文本切词时间是0.026秒,大概是1.5MB文本/秒,支持PHP4和PHP 5。

  ICTCLAS:  

  这可是最早的中文开源分词项目之一,ICTCLAS在国内973专家组组织的评测中活动获得了第一名,在第一届国际中文处理研究机构SigHan组织的评测中都获得了多项第一名。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M.ICTCLAS全部采用C/C++编写,支持linux、FreeBSD及Windows系列操作系统,支持C/C++、C#、Delphi、java等主流的开发语言。

  庖丁解牛分词:

  Java 提供lucence 接口,仅支持Java语言。

  CC-CEDICT:

  一个中文词典开源项目,提供一份以汉语拼音为中文辅助的汉英辞典,截至2009年2月8日,已收录82712个单词。其词典可以用于中文分词使用,而且不存在版权问题。Chrome中文版就是使用的这个词典进行中文分词的。

  基于VB/ASP的中文分词

  上面的开源项目没有给予VB和ASP的,这里提供一个简单的VB/ASP类,加上词典之后就可以进行分词了,注意这个类只供演示,其分词速度极慢不适合实际应用。

  类名为:WordSplit

PRivate rootTable As String
http://bizhi.knowsky.com/
Private Function GetCount(ByVal s As String) As Long
    GetCount = InStr(1, rootTable, s)
End Function

Public Function WordCount(ByVal strString As String, ByVal strGetWord As String) As Long
    Dim k
    k = Split(strString, strGetWord)
    WordCount = UBound(k)
End Function


' 分析输入的字符串,将其切割成一个个的词语。
' <param name="s">待切割的字符串</param>
' <returns>所切割得到的中文词语数组</returns>

Public Function ParseChinese(ByVal s As String, ByVal separator As String) As String
    Dim lngLength As Long
    Dim strTemp As String
    Dim ArrayList As String
    Dim i, j

    ArrayList = ""
    lngLength = Len(s)
    i = 1
    While i < lngLength
        strTemp = Mid(s, i, 1)
        If GetCount(strTemp) > 1 Then
            j = 2
            While i + j < lngLength + 1 And GetCount(Mid(s, i, j)) > 0
                j = j + 1
            Wend
            strTemp = Mid(s, i, j - 1)
            i = i + j - 2
        End If
        i = i + 1
        'WordAdd (temp)
        ArrayList = ArrayList + strTemp + separator
    Wend
    ParseChinese = ArrayList

End Function

Private Sub Class_Initialize()
    Dim fso, templetfile, txtfile
    templetfile = App.Path + "\ChineseDictionary.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txtfile = fso.OpenTextFile(templetfile, 1)
    rootTable = txtfile.ReadAll
    txtfile.Close
End Sub

  调用示例:

    strInput = "中文分词指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。"
    Dim strWordSplit As New WordSplit
    strSubject = strWordSplit.ParseChinese(strInput, "|")
    arrSubject = Split(strSubject, "|")

转载自月光博客 [ http://www.williamlong.info/ ]

上一篇:ASP使用Google的translate API 人气:2067
下一篇:借用hosts轻松破解阻止外部提交 人气:2271
网站文章搜索
邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<ASP技巧教程>的内容
今日更新文章
·Office中Word十技巧 受益终身
·细节功能更新 暴风影音3.10.09.05发布
·最新Firefox 4.0删减与确定功能列表
·CorelDRAW 12 与广告设计高级实战 45
·CorelDRAW 12 与广告设计高级实战 44
·CorelDRAW 12 与广告设计高级实战 43
·CorelDRAW 12 与广告设计高级实战 42
·CorelDRAW 12 与广告设计高级实战 41
·CorelDRAW 12 与广告设计高级实战 40
·CorelDRAW 12 与广告设计高级实战 39
·CorelDRAW 12 与广告设计高级实战 38
·CorelDRAW 12 与广告设计高级实战 37
本栏目推荐文章
·Struts的文件上传
·JAVA短信二次开发包,JAVA短信二次开发控
·将菜单保存为菜单模板
·异常死亡进程的自动复活
·软件开发的“简单”艺术—有感于VS.net
·用JavaBean数据组件集成JSF应用程序与EJ
·致 java 爱好者(2)
·编程技术分享:Hibernate开发心得
·使用JAVA通过JXL(JExcel)动态生成Excel文
·Java基础知识 J2EE初学者需要注意的问题
·Java程序开发中代理技术的使用方法
·JAVA程序员面试32问,你能回答多少题?
Copyright © 2000-2010 www.Devdao.com All rights reserved | 沪ICP备05001343号 sitemap