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