php實現自動擷取產生關鍵詞功能_PHP教程

來源:互聯網
上載者:User
tag什麼的都是要求使用程式的人自行輸入,對於某些懶人及為了程式的體驗,則是希望可以有自動產生文章關鍵詞,自動擷取文章tag的類似功能,這次為了迎接新的項目,所以搗鼓了一晚上,研究了一下這個功能。
要實現自動擷取關鍵詞的功能,大概可以分成三步
1,通過分詞演算法將標題和內容分別進行分割,提取出關鍵詞和頻度。當前主要的兩個演算法是中科院的ICTCLAS和隱馬爾可夫模型。但這兩個都太高端,有一定的門檻,且都是只支援C++/JAVA。基於PHP的當前有兩個是值得推薦的PSCWS和HTTPCWS。 SCWS於2008-03-08發布1.0.0 正式版,到現在最新版本已經到了1.0.4。PSCWS是它的PHP版。而HTTPCWS是張宴開發的,之前叫PHPCWS。PHPCWS 先使用“ICTCLAS 3.0 共用版中文分詞演算法”的API進行初次分詞處理,再使用自行編寫的“逆向最大匹配演算法”對分詞和進行詞語合并處理,並增加標點符號過濾功能,得出分詞結果。不過很遺憾目前僅支援Linux系統,尚未移植到win平台上。
2,將提取結果與現有詞庫進行比較,處理,去除無用的詞得到最符合規則的關鍵詞。這裡主要就是要看詞庫了,我們可以自己定義詞庫,也可以使用現有的成熟詞庫。比如新浪和網易部落格都有這個功能,。他們分詞應該有不錯的詞庫,因為他們都是大網站,而我呢,區區一個小程式員,不可能搞到什麼權威的詞庫,所以只能從現有的開來源程式上入手,看看他們的詞庫。
3,在處理後的提取結果中選擇適當的作為最終的關鍵詞,得到最符合當前內容的關鍵詞,在這個階段就是具體情況具體分析了,無論如何也不可能達到人的那種智能化。最多是。當前PHP類CMS都自有自己的提取關鍵詞系統。
目前在網路上流傳最廣的是DEDECMS的分詞源碼,我做了測試,發現相當的呆,效果很不好。它先設定一個關鍵詞長度,確定擷取關鍵詞的數量,然後取詞,它認為標題分好的詞就是所需關鍵詞,在加上從本文中讀取關鍵詞只到達到這個所設定的長度,就是最終關鍵詞了。另外類似“我們”等無意義的詞也沒有去除掉提取並被列為關鍵詞的頻率太高,甚至有時候還會把空格的HTML提出來做為關鍵詞,亟待改進。不過如果作為協助工具功能,它已經很好了。而discuz的稍微好一些,但是discuz並沒有提供源碼,只是提供了一個線上api。
而dede的分詞也有好幾個版本,最好的應該是最新版的吧,出現頻率什麼都有了,下面就以dede5.7的分詞和discuz的api的結果對比下
測試例子:

$title="THINKPHP官方即將停止對2.0版本的支援";
$body="了更好地做好ThinkPHP架構的開發、維護和支援工作,官方宣布從2012年5月1日起s對2.0及之前版本的維護和支援,為了節能低碳考慮,同時也取消官網的相應版本和文檔下載。
就此緬懷那些年,曾經一起開發的ThinkPHP版本吧!
關於ThinkPHP 2.0版本
ThinkPHP 誕生於2006年,致力於WEB應用的快速開發,其2.0版本發佈於2009年10月1日 ,在之前的1.*版本上完成新的重構和飛躍,當時是一次劃時代的版本,為新版奠定了基礎,同時也積累了較多的使用者群和網站,隨著架構的快速更新,和新版 2.1、2.2和3.0版本的陸續發布,預示著ThinkPHP的3.0時代到來了,2.0的生命週期宣告結束。但基本上2.0的很多功能都延續或者完善到2.1版本中了,從2.0版本升級到2.1和2.2版本也相對輕鬆。2.2版本是2.*版本的最終版本,不再更新功能,僅做BUG修複。";

一、dede分詞
將結果排序後如下

標題Array
(
[THINKPHP] => 1
[官方] => 1
[即將] => 1
[停止] => 1
[對] => 1
[2.0] => 1
[版本] => 1
[的] => 1
[支援] => 1
)
內容Array
(
[版本] => 12
[的] => 12
[和] => 8
[ThinkPHP] => 5
[2.0] => 5
[也] => 3
[2.2] => 3
[2.1] => 3
[開發] => 3
[3.0] => 2
[是] => 2
[快速] => 2
[到] => 2
[發布] => 2
[維護] => 2
[之前] => 2
[了] => 2
[新版] => 2
[支援] => 2
[架構] => 2
[同時] => 2
[從] => 2
*******

對此如何取出最終的需要的關鍵詞呢? 初步思路是先去除“的”,“些”這些詞,再按照內容的排序次序,依次看分到是否出現在標題中出現即為所需的,這樣可以取出一定量的詞最為最終關鍵詞。如上結果我們可以得到

版本 thinkphp 2.0 支援 停止

五個關鍵詞。看起來結果還是可以接受的。
二、在來看discuz的,利用api得到的是一個xml文檔,解析後得到的關鍵詞是

的、快速、版本升級、開發、使用者

五個詞,第一個是“的”......
對比這兩種方式發現第一種dede+後續處理的較為接近文檔的內容,應該是稍好一些,而discuz的偏離了文章的主題,但是其取到詞有一定的熱門性。


作者:zdrjlamp

http://www.bkjia.com/PHPjc/478100.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478100.htmlTechArticletag什麼的都是要求使用程式的人自行輸入,對於某些懶人及為了程式的體驗,則是希望可以有自動產生文章關鍵詞,自動擷取文章tag的類似...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.