2010-05-06 78 views
22

我正在爲我參加的大學課程做一個項目。使用PHP進行文本挖掘

我使用PHP構建一個簡單的Web應用程序,鳴叫分類基於一組詞典「陽性」(或快樂)和「負」(或悲傷)。我現在想到的算法是樸素貝葉斯分類器或決策樹。

但是,我找不到任何PHP庫,可以幫助我做一些嚴肅的語言處理。 Python有NLTK(http://www.nltk.org)。有什麼類似的PHP?

我打算使用WEKA作爲Web應用的後端(在從PHP中從命令行調用Weka的),但它不似乎效率不。

你知道我應該用這個項目嗎?或者我應該切換到Python?

感謝

+2

樸素貝葉斯分類器是不是真的很難,如果你理解了基本原理自己編寫。你實際上可以用PHP這樣做所有的事情。 聖哈辛托已經涵蓋了我對NLP部分所說的一切。 我可以告訴你的另外一件事情,就是我幾周前做過的一個類似的項目,那就是使用標準的文字袋方法進行情感分類並不能很好地工作。儘管我沒有嘗試任何類似n-gram的東西,但我確實有這種感覺,他們會表現得更好,但當然這會讓你有更多的尺寸... – 2010-05-07 07:33:48

+0

沒有任何跡象表明你帖子或你鏈接到的那個爲什麼這是一個合適的解決方案。 – 2010-05-06 23:38:13

+0

PEAR的Text_LanguageDetect可以從文本樣本中識別52種人類語言,併爲每個語言返回置信度分數。這不是一個有趣的選擇嗎? – nuqqsa 2010-05-07 16:28:59

回答

9

如果你打算使用樸素貝葉斯分類器,你並不真的需要一個整體噸NL處理。所有你需要的是一個算法來阻止推文中的單詞,如果你想要的話,刪除停用詞。

干擾算法比比皆是,不難編碼。去除停用詞只是搜索散列圖或類似的東西。我沒有看到切換開發平臺來適應NLTK的理由,儘管它是一個非常好的工具。

2

您還可以使用uClassify API做類似樸素貝葉斯東西。您基本上像使用任何算法一樣訓練分類器(除非您通過Web界面或將XML文檔發送到API)。然後,無論何時您收到新的推文(或一批推文),您都可以調用API來對其進行分類。速度很快,您不必擔心會對其進行調整。當然,這意味着你失去了通過自己控制分類器而獲得的靈活性,但如果這本身不是班級項目的目標,那也意味着對你的工作會減少。

0

你也可以用節儉或Gearman的處理NLTK

5

前段時間,我做了一個非常類似的項目 - 只對RSS消息項目進行分類,而不是twitter--也將PHP用於前端,WEKA用於後端。我使用PHP/Java Bridge,它的使用相對簡單 - 添加到您的Java(WEKA)代碼中的幾行代碼,它允許PHP調用它的方法。下面是從他們的網站的PHP端代碼的例子:

<?php 
require_once("http://localhost:8087/JavaBridge/java/Java.inc"); 

$world = new java("HelloWorld"); 
echo $world->hello(array("from PHP")); 
?> 

然後(如已經有人提到過),你只需要過濾掉停止詞。爲此添加一個txt文件對於添加新單詞非常方便(當你開始過濾掉不相關的單詞並解決拼寫錯誤時,它們往往會堆積如山)。

樸素貝葉斯模型具有強大的獨立特徵假設,即它不考慮通常配對的單詞(如成語或短語) - 只將每個單詞作爲獨立事件。然而,它可以超越一些更復雜的方法(如詞幹,IIRC),並且應該適合大學課程而不會使其變得不必要地複雜。