青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 令人“心神不宁”的网络解决中文Google的跳转问题 »

中文分词和TF-IDF

  中文分词(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等主流的开发语言。

  HTTPCWS

  HTTPCWS 是一款基于HTTP协议的开源中文分词系统,目前仅支持Linux系统。HTTPCWS 使用“ICTCLAS 3.0 2009共享版中文分词算法”的API进行分词处理,得出分词结果。HTTPCWS 将取代之前的 PHPCWS 中文分词扩展

  庖丁解牛分词

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

  CC-CEDICT

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

  基于VB/ASP的中文分词

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

  类名为:WordSplit

Private rootTable As String

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/archives/1839.html
  • 文章排行:
  • 1.shell
  • 做基于云端的高级智能化伪原创,需要分词了。好文章!
  • 2011/6/10 0:03:26   支持(11)反对(5) 回复
  • 2.Randy
  • 这段时间正在折腾这个东西
  • 2009/6/24 0:37:11   支持(12)反对(7) 回复
  • 7.coldfly
  • 你好,看了你的文章,我很想了解一下关于文本语义提取方面的一些思路,不知道您在这方面有没有研究,期待您的建议
    heavenpoppy 于 2009-6-27 10:45:37 回复
    语义提取跟分词是两码事,这边的分词系统是基于词频的,只是权重分配调节,不同权重分配导致不同的结果,语义提取涉及语义网络的问题,还是看看语义网络的东西,现在很多做本体之类的都有这方面的
  • 2009/6/23 23:36:41   支持(9)反对(6) 回复
  • 8.黑白之间
  • 看完了也不知道是什么意思,不明白
  • 2009/6/24 16:08:54   支持(14)反对(11) 回复
  • 9.foremire
  • 分词技术也算得上半个人工智能,学术界一直以来都在不断进行相关研究。相对而言,英文分词的性能和准确度还是比中文要高得多,这方面我们还有很多工作要做。
    xnhs 于 2009-6-25 8:59:11 回复
    英文单词本来就是分开呀。
  • 2009/6/24 17:53:59   支持(11)反对(8) 回复
  • 11.塞班互动
  • 不知道能不能用在SEO上,比如:关键字抓取?
  • 2009/6/24 14:21:28   支持(9)反对(7) 回复
  • 13.kate
  • 月光的博客,前后片呼应,不错。

    绿坝,谷歌色情,这都和分词技术有关系,不错!

    前两天差点在月光做沙发坐成三连冠了。
  • 2009/6/24 1:34:35   支持(8)反对(7) 回复
  • 15.微笑
  • 分词。。最 无脑 的 方式 就是 像 我 这样,。。哈,也是个不错的 方式,可以从输入法 的判断起手,在不浪费空格时间的情况下,以某种方式分词,,
  • 2009/7/15 22:24:42   支持(11)反对(10) 回复
  • 17.XX
  • 上面的有人说看不懂,咱来个解释吧。
    将了某软件,上了某网站。网站上有一句话。
    十八口交换机。
    最后看到的是
    十八嘴交换机。
    十八口交换机,变成了十八嘴交换机。
    看懂了吧。
  • 2009/6/24 12:49:28   支持(9)反对(9) 回复
  • 18.XX
  • 上面打错一字,应该是装了某个软件。
    另外,也有这样的:
    十八口交换机,变成:十八文明用语交换机。
  • 2009/6/24 12:50:39   支持(8)反对(8) 回复
  • 20.xiaotu
  • 感觉分词的技术,对于搜索引擎很重要,其他的应用就没怎么见过了
  • 2009/6/24 8:04:32   支持(6)反对(7) 回复
  • 21.鬓角
  • 纯技术文章,只回不看,吼吼。。
  • 2009/6/24 8:10:18   支持(7)反对(8) 回复
  • 22.零距离
  • 好久没来看看看了,分词对我一窍不通
  • 2009/6/24 8:34:36   支持(6)反对(7) 回复
  • 25.xwseg
  • phenix word segment
    速度 10M/s
    效果 媲美百度,海量等分词
    yoyo 于 2010-9-29 15:33:59 回复
    phenix word segment?我怎么搜索不到呢?
  • 2009/6/24 0:46:27   支持(7)反对(9) 回复
  • 26.danty
  • 虽说有点深奥,但还是要看一看!
    支持月光^_^
  • 2009/6/24 11:31:58   支持(7)反对(9) 回复
  • 28.czlelva
  • 月光,介绍下国外免费的分词技术
    或者类似于google的单词自动修正技术
    比如输入一个gogole,google就会提示你did you mean google?
  • 2009/6/24 17:53:08   支持(7)反对(9) 回复
  • 29.园子
  • 确实也不太懂这方面的知识

    以后多学习吧~
  • 2009/6/24 9:49:20   支持(3)反对(6) 回复
  • 30.cyberdreams
  • 百度和谷歌对中文的分词,是否不同?
  • 2012/3/22 15:51:17   支持(5)反对(8) 回复
  • 31.calf
  • vb,asp很相似
    kate 于 2009-6-24 1:33:52 回复
    月光的博客,前后片呼应,不错。

    绿坝,谷歌色情,这都和分词技术有关系,不错!

    前两天差点在月光做沙发坐成三连冠了。
  • 2009/6/23 22:22:50   支持(3)反对(8) 回复
  • 32.koomi
  • 以前看了马克了,居然现在搞起了这方面的研究,囧~~再来看看
  • 2011/2/18 16:46:33   支持(6)反对(11) 回复
  • 33.妖狐闪现
  • 属于自然语言处理的技术,中文分词现在的准确率很难再提升了。
  • 2009/6/24 20:32:27   支持(9)反对(15) 回复
  • 34.grnnet
  • 文章写的真好啊,有技术就是好,访问量就是大
  • 2009/6/24 13:12:51   支持(5)反对(12) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.