程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP技巧 >> 中文分詞和TF-IDF

中文分詞和TF-IDF

編輯:ASP技巧

  中文分詞(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, "|")

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved