轉載自月光部落格 [ http://www.williamlong.info/ ] - 中文分詞和TF-IDF

herosoft發表於2009-06-25

  TF-IDF(term frequency–inverse document frequency)是一種用於資訊搜尋和資訊挖掘的常用加權技術。在搜尋、文獻分類和其他相關領域有廣泛的應用。

  TF-IDF的主要思想是,如果某個詞或短語在一篇文章中出現的頻率TF高,並且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。TF詞頻(Term Frequency)指的是某一個給定的詞語在該檔案中出現的次數。IDF反文件頻率(Inverse Document Frequency)的主要思想是:如果包含詞條的文件越少,IDF越大,則說明詞條具有很好的類別區分能力。

  使用TF*IDF可以計算某個關鍵字在某篇文章裡面的重要性,因而識別這篇文章的主要含義,實現計算機讀懂文章的功能。

  常見中文分詞開源專案:

  :

  開發的一套基於詞頻詞典的機械中文分詞引擎,它能將一整段的漢字基本正確的切分成詞。採用的是採集的詞頻詞典,並輔以一定的專有名稱,人名,地名,數字年代等規則識別來達到基本分詞,經小範圍測試大概準確率在 90% ~ 95% 之間,已能基本滿足一些小型搜尋引擎、關鍵字提取等場合運用。45Kb左右的文字切詞時間是0.026秒,大概是1.5MB文字/秒,支援PHP4和PHP 5。

  :  

  這可是最早的中文開源分詞專案之一,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語言。

  :

  一箇中文詞典開源專案,提供一份以漢語拼音為中文輔助的漢英辭典,截至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


' 分析輸入的字串,將其切割成一個個的詞語。
' 待切割的字串
' 所切割得到的中文詞語陣列

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, "|")

[@more@]本文連結地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/220284/viewspace-1023486/,如需轉載,請註明出處,否則將追究法律責任。

相關文章