廢話不多說(shuō),直接上干貨齿拂。
要想利用你的機(jī)器實(shí)現(xiàn)對(duì)新聞自動(dòng)識(shí)別分類(lèi)署海,首先你需要準(zhǔn)備以下幾個(gè)東東:
1.語(yǔ)料庫(kù)(人之所以能夠?qū)δ承┦挛镞M(jìn)行判斷識(shí)別,是因?yàn)榇竽X之前有過(guò)記憶存儲(chǔ)捻勉。機(jī)器也是刀森!不過(guò)它學(xué)的比人類(lèi)快,只要你把相關(guān)的語(yǔ)料下載到硬盤(pán)就等于你的機(jī)器已完成了對(duì)相關(guān)內(nèi)容的學(xué)習(xí)埠偿。)
注:相關(guān)語(yǔ)料庫(kù)的獲取可以參考:http://www.reibang.com/p/206caa232ded榜晦;我使用的是搜狗語(yǔ)料庫(kù)。
2.在你機(jī)器上搭建好Python編譯環(huán)境抖剿。(我安裝的是Python3.4.2版本)
3.機(jī)器學(xué)習(xí)算法庫(kù)(scikit-learn)的安裝,可以參考:http://www.reibang.com/p/21b758541825
4.搭建分詞系統(tǒng)愁憔。(我使用的是jieba分詞系統(tǒng)孽拷,具體如何搭建可以參考:http://www.th7.cn/Program/Python/201603/783911.shtml)
5.停用詞庫(kù)脓恕。(可以到:http://download.csdn.net/detail/qq_28155529/9890386進(jìn)行下載,對(duì)應(yīng)stopword.txt文件)
上面如果都準(zhǔn)備好了秋茫,下面我們就開(kāi)始進(jìn)入搬磚模塊了乃秀!
機(jī)器自動(dòng)分類(lèi)的總體流程圖:
流程說(shuō)明:
(1)要分類(lèi)跺讯,首先要有一個(gè)分好類(lèi)的訓(xùn)練語(yǔ)料庫(kù)來(lái)作為我們分類(lèi)參考的標(biāo)準(zhǔn)。語(yǔ)料庫(kù)的構(gòu)建可以通過(guò)爬蟲(chóng)自己爬取但是測(cè)試發(fā)現(xiàn)爬取太過(guò)于費(fèi)時(shí)而且爬下來(lái)的新聞還是未分好類(lèi)的局荚,還需后期自己手動(dòng)分類(lèi)因此為了縮短項(xiàng)目開(kāi)發(fā)周期愈污,直接下載使用已分好類(lèi)的搜狗語(yǔ)料庫(kù)(http://www.sogou.com/labs/resources.html);
(2)拿到語(yǔ)料庫(kù)后首装,針對(duì)這些原始語(yǔ)料擎析,需要提取它們的特征,這樣才能知道具備哪些特征的文本屬于哪種類(lèi)別桨醋。文本的特征主要是由一系列詞性的詞構(gòu)成现斋,所以要對(duì)文本進(jìn)行分詞庄蹋,通過(guò)后期提取相關(guān)詞性的詞來(lái)達(dá)到獲取文本特征的目的迷雪。(本項(xiàng)目使用的是jieba分詞系統(tǒng))虫蝶;
(3)分詞之后能真,我們可以從整個(gè)原始語(yǔ)料庫(kù)中提取出一定數(shù)量的代表性詞匯(名詞),提取到的名詞可能包含停用詞粉铐,還需要在提取的名詞詞庫(kù)基礎(chǔ)上去除停用詞痹扇,獲得最終的名詞詞庫(kù);
(4)統(tǒng)計(jì)詞頻朴摊,至于為什么要統(tǒng)計(jì)詞頻茎活,就不用說(shuō)了吧,一個(gè)詞在某類(lèi)文本里出現(xiàn)的次數(shù)越多,越能代表這一類(lèi)文本采桃。當(dāng)然如果某個(gè)詞在這一類(lèi)文本里出現(xiàn)次數(shù)很多而在其他類(lèi)文本里根本不出現(xiàn)普办,就更能代表這一類(lèi)文本了。
(5)計(jì)算特征值肢娘,其實(shí)詞的頻率只是文本最重要的特征之一舆驶,如果只靠詞的頻率去判斷文本的類(lèi)別的話,顯然正確率是很低的拘荡。本項(xiàng)目使用TF-IDF(是一種用于資訊檢索與資訊探勘的常用加權(quán)技術(shù))來(lái)對(duì)文本進(jìn)行更深層度的特征提取撬陵。
TF-IDF綜合表征了該詞在文檔中的重要程度和文檔區(qū)分度。但在文本分類(lèi)中單純使用TF-IDF來(lái)判斷一個(gè)特征是否有區(qū)分度是不夠的蟋定。它沒(méi)有考慮特征詞在分類(lèi)間的分布驶兜。如果一個(gè)特征詞,在各個(gè)類(lèi)間分布比較均勻犀盟,這樣的詞對(duì)分類(lèi)基本沒(méi)有貢獻(xiàn)蝇狼;但是如果一個(gè)特征詞比較集中的分布在某個(gè)類(lèi)中,而在其它類(lèi)中幾乎不出現(xiàn)贱枣,這樣的詞卻能夠很好代表這個(gè)類(lèi)的特征颤专,而TF-IDF不能區(qū)分這兩種情況栖秕。沒(méi)有考慮特征詞在類(lèi)內(nèi)部文檔中的分布情況。在類(lèi)內(nèi)部的文檔中只壳,如果特征詞均勻分布在其中暑塑,則這個(gè)特征詞能夠很好的代表這個(gè)類(lèi)的特征,如果只在幾篇文檔中出現(xiàn)惕艳,而在此類(lèi)的其它文檔中不出現(xiàn)驹愚,顯然這樣的特征詞不能夠代表這個(gè)類(lèi)的特征么鹤。這時(shí)就要通過(guò)卡方檢驗(yàn)(Chi-square)的計(jì)算方法得到數(shù)據(jù)字典。(卡方校驗(yàn)如下圖)
(6)借助機(jī)器學(xué)習(xí)算法庫(kù)(Scikit-learn)中的函數(shù)對(duì)上面進(jìn)行過(guò)數(shù)據(jù)挖掘的語(yǔ)料庫(kù)進(jìn)行自動(dòng)拆分棠耕,拆分為訓(xùn)練集(train)和測(cè)試集(test)窍荧。(本項(xiàng)目采用的是樸素貝葉斯算法進(jìn)行分類(lèi)訓(xùn)練)得到測(cè)試結(jié)果,測(cè)試結(jié)果顯示對(duì)新聞分類(lèi)的準(zhǔn)確率維持在70%到80%之間郊楣。
代碼部分說(shuō)明:(太長(zhǎng)了這里就不貼了瓤荔,下載地址:http://download.csdn.net/detail/qq_28155529/9890386)
第一步:通過(guò)PHP連接MySQL數(shù)據(jù)庫(kù)输硝,把數(shù)據(jù)庫(kù)新聞表中的每條新聞?dòng)涗涀x取到指定文件夾下的txt文件中,每條記錄對(duì)應(yīng)一個(gè)txt文件橘荠,并以每條新聞?dòng)涗浀膇d作為txt文件的名郎逃;(目的:方便后面使用Python語(yǔ)言編寫(xiě)的腳本對(duì)新聞進(jìn)行分類(lèi)去重操作)------此步操作代碼對(duì)應(yīng)operation.php文件
第二步:把第一步從數(shù)據(jù)庫(kù)讀取到硬盤(pán)上的每條新聞,進(jìn)行分詞贮懈,去停用詞错邦,計(jì)算詞頻等一系列操作型宙,得到每條新聞的最終特征伦吠;------此步操作代碼對(duì)應(yīng)Most_powerful.py文件
提示:之前下載的搜狗語(yǔ)料庫(kù)也是經(jīng)過(guò)了上面兩步進(jìn)行特征提取后才投入使用的。比對(duì)的時(shí)候不是直接拿數(shù)據(jù)庫(kù)中的新聞和原始語(yǔ)料庫(kù)(搜狗語(yǔ)料庫(kù))中的新聞直接進(jìn)行比對(duì)毛仪,而是拿對(duì)數(shù)據(jù)庫(kù)中每條新聞進(jìn)行提取后的特征與經(jīng)過(guò)特征提取后的特征搜狗語(yǔ)料庫(kù)進(jìn)行比對(duì)的哦
第三步:分別從待分類(lèi)的文件夾和已分好類(lèi)作為標(biāo)準(zhǔn)的搜狗語(yǔ)料庫(kù)加載數(shù)據(jù)箱靴,進(jìn)行分類(lèi)判斷。------此步操作代碼對(duì)應(yīng)collect.py文件棍矛。
第四步:最后把分好類(lèi)的信息,傳遞給PHP文件荐类,利用PHP把分好類(lèi)的信息寫(xiě)入到MySQL數(shù)據(jù)庫(kù)茁帽,完成機(jī)器自動(dòng)分類(lèi)操作潘拨。-----此步操作代碼對(duì)應(yīng)operation.php文件。
好了搬磚完成季蚂!