原創(chuàng)文章如轉(zhuǎn)載,請(qǐng)注明:轉(zhuǎn)載自月光博客 [ http://www.williamlong.info/ ]
本文鏈接地址:http://www.williamlong.info/archives/1839.html
TF-IDF(term frequency–inverse document frequency)是一種用于信息搜索和信息挖掘的常用加權(quán)技術(shù)。在搜索、文獻(xiàn)分類(lèi)和其他相關(guān)領(lǐng)域有廣泛的應(yīng)用。
TF-IDF的主要思想是,如果某個(gè)詞或短語(yǔ)在一篇文章中出現(xiàn)的頻率TF高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語(yǔ)具有很好的類(lèi)別區(qū)分能力,適合用來(lái)分類(lèi)。TF詞頻(Term Frequency)指的是某一個(gè)給定的詞語(yǔ)在該文件中出現(xiàn)的次數(shù)。IDF反文檔頻率(InverseDocument Frequency)的主要思想是:如果包含詞條的文檔越少,IDF越大,則說(shuō)明詞條具有很好的類(lèi)別區(qū)分能力。
使用TF*IDF可以計(jì)算某個(gè)關(guān)鍵字在某篇文章里面的重要性,因而識(shí)別這篇文章的主要含義,實(shí)現(xiàn)計(jì)算機(jī)讀懂文章的功能。
常見(jiàn)中文分詞開(kāi)源項(xiàng)目:
SCWS:
Hightman開(kāi)發(fā)的一套基于詞頻詞典的機(jī)械中文分詞引擎,它能將一整段的漢字基本正確的切分成詞。采用的是采集的詞頻詞典,并輔以一定的專(zhuān)有名稱(chēng),人名,地名,數(shù)字年代等規(guī)則識(shí)別來(lái)達(dá)到基本分詞,經(jīng)小范圍測(cè)試大概準(zhǔn)確率在 90% ~ 95%之間,已能基本滿(mǎn)足一些小型搜索引擎、關(guān)鍵字提取等場(chǎng)合運(yùn)用。45Kb左右的文本切詞時(shí)間是0.026秒,大概是1.5MB文本/秒,支持PHP4和PHP 5。
這可是最早的中文開(kāi)源分詞項(xiàng)目之一,ICTCLAS在國(guó)內(nèi)973專(zhuān)家組組織的評(píng)測(cè)中活動(dòng)獲得了第一名,在第一屆國(guó)際中文處理研究機(jī)構(gòu)SigHan組織的評(píng)測(cè)中都獲得了多項(xiàng)第一名。ICTCLAS3.0分詞速度單機(jī)996KB/s,分詞精度98.45%,API不超過(guò)200KB,各種詞典數(shù)據(jù)壓縮后不到3M.ICTCLAS全部采用C/C++編寫(xiě),支持Linux、FreeBSD及Windows系列操作系統(tǒng),支持C/C++、C#、Delphi、Java等主流的開(kāi)發(fā)語(yǔ)言。
HTTPCWS 是一款基于HTTP協(xié)議的開(kāi)源中文分詞系統(tǒng),目前僅支持Linux系統(tǒng)。HTTPCWS 使用“ICTCLAS 3.0 2009共享版中文分詞算法”的API進(jìn)行分詞處理,得出分詞結(jié)果。HTTPCWS 將取代之前的 PHPCWS 中文分詞擴(kuò)展。
Java 提供lucence 接口,僅支持Java語(yǔ)言。
一個(gè)中文詞典開(kāi)源項(xiàng)目,提供一份以漢語(yǔ)拼音為中文輔助的漢英辭典,截至2009年2月8日,已收錄82712個(gè)單詞。其詞典可以用于中文分詞使用,而且不存在版權(quán)問(wèn)題。Chrome中文版就是使用的這個(gè)詞典進(jìn)行中文分詞的。
基于VB/ASP的中文分詞
上面的開(kāi)源項(xiàng)目沒(méi)有給予VB和ASP的,這里提供一個(gè)簡(jiǎn)單的VB/ASP類(lèi),加上詞典之后就可以進(jìn)行分詞了,注意這個(gè)類(lèi)只供演示,其分詞速度極慢不適合實(shí)際應(yīng)用。
類(lèi)名為: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
' 分析輸入的字符串,將其切割成一個(gè)個(gè)的詞語(yǔ)。
' <param name="s">待切割的字符串</param>
' <returns>所切割得到的中文詞語(yǔ)數(shù)組</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
調(diào)用示例:
strInput = "中文分詞指的是將一個(gè)漢字序列切分成一個(gè)一個(gè)單獨(dú)的詞。中文分詞是文本挖掘的基礎(chǔ),對(duì)于輸入的一段中文,成功的進(jìn)行中文分詞,可以達(dá)到電腦自動(dòng)識(shí)別語(yǔ)句含義的效果。"
Dim strWordSplit As New WordSplit
strSubject = strWordSplit.ParseChinese(strInput, "|")
arrSubject = Split(strSubject, "|")
聯(lián)系客服