我試圖實現的是一個相當平凡的「採取搜索結果(如標題&簡短描述),將它們集成到PHP中有意義的命名組」程序。用於word聚類/ NLP的PHP庫?
後google搜索的時間和無數次的搜索上SO(產生有趣的結果一如既往,儘管沒有什麼真正有用的),我仍然無法找到任何PHP庫,將幫助我處理集羣。
- 有沒有這樣一個PHP庫,我可能錯過了?
- 如果不是,是否有任何處理集羣的FOSS有一個體面的API?
我試圖實現的是一個相當平凡的「採取搜索結果(如標題&簡短描述),將它們集成到PHP中有意義的命名組」程序。用於word聚類/ NLP的PHP庫?
後google搜索的時間和無數次的搜索上SO(產生有趣的結果一如既往,儘管沒有什麼真正有用的),我仍然無法找到任何PHP庫,將幫助我處理集羣。
像這樣:
使用禁用詞列表,讓所有的單詞或短語不在禁用詞,計算每個的occurances,按降序排序。
停用詞必須是所有常見英語詞彙的列表。它還應該包含標點符號,並且您需要首先將所有標點符號預置爲單獨的單詞,例如, 「像這樣的東西。」 - >「像這樣的東西。」或者,您可以刪除所有標點符號。
$content=preg_replace('/[^a-z\s]/', '', $content); // remove punctuation
$stopwords='the|and|is|your|me|for|where|etc...';
$stopwords=explode('|',$stopwords);
$stopwords=array_flip($stopwords);
$result=array(); $temp=array();
foreach ($content as $s)
if (isset($stopwords[$s]) OR strlen($s)<3)
{
if (sizeof($temp)>0)
{
$result[]=implode(' ',$temp);
$temp=array();
}
} else $temp[]=$s;
if (sizeof($temp)>0) $result[]=implode(' ',$temp);
$phrases=array_count_values($result);
arsort($phrases);
現在您已經按照輸入數據中出現的術語頻率的順序創建了一個關聯數組。
你想如何做匹配取決於你,它很大程度上取決於輸入數據中字符串的長度。
我會看看是否有任何前3個數組鍵匹配任何其他數據中的前3名。這些就是你的小組。
讓我知道你是否有任何麻煩。
我忘了首先提到strtolower(),儘管它應該很明顯。 – Alasdair
「...將它們聚類成有意義的羣體」有點含糊,你需要更具體。
對於初學者,您可以查看K-Means聚類。
看一看這個頁面和網站:
PHP/irInformation Retrieval and other interesting topics
編輯:你可以嘗試一些數據交叉引用搜索結果的東西,如開放式目錄dmoz RDF數據轉儲,然後挖掘自己列舉匹配的類別。
EDIT2:這裏是一個dmoz /類的問題,也提到了「Faceted Search」!
Dmoz/Monster algorithme to calculate count of each category and sub category?
謝謝,我已經找到了一個...雖然是一個有趣的閱讀和很好的示例代碼,但它遠不是一個庫。至於「有意義的羣體」,[這個Yippy搜索(介意他們稱之爲「雲」)](http://search.yippy.com/search?input-form=clusty-simple&v%3Asources=webplus-ns-aaf&v% 3Aproject = clusty&query = sightseeing + munich)說明了我想要實現的很好。 – vzwick
@vzwick:你的意思是......刻面? – netcoder
@vzwick啊,示例站點解釋了所有。簡單的答案是否定的 - 你不會找到一個圖書館自動爲你做這件事。 – zaf
如果你只幹這一行英文,你可以使用共發現:http://wordnet.princeton.edu/。這是一個廣泛用於研究的詞典,其中提供了英語單詞的同義詞組。兩個單詞之間的最短距離可以作爲一個相似性度量來按照zaf提出的方法進行聚類。
顯然有一個PHP接口,共發現這裏:http://www.foxsurfer.com/wordnet/。它出現在這個問題:How to use word Net with php,但我沒有嘗試過。但是,使用PHP自己的命令行工具進行接口也是可行的。
你也可以看看Programming Collective Intelligence(第3章:發現組)由託比·西格倫其經過使用Python只是這種使用情況。然而,一旦你瞭解它的工作原理,你應該能夠用PHP實現它。
即使它不是PHP的Carrot2項目提供了幾種集羣引擎,可與Solr的集成。
這可能會有所改變,但請查看OpenCalais。他們有一個網絡服務,允許你傳遞一段文本,它會傳回你在文本中找到的事物的可解析迴應,比如地點,人物,事實等。你可以使用這些類別來建立你的「雲」,並選擇要顯示的結果。
我已經使用這個庫在PHP幾次,它一直是很容易的工作。
同樣,可能與您的嘗試無關。也許你可以發表一個你想要完成的事情的例子嗎?
如果您可以預先爲您的分面搜索定義過濾器(命名組),那麼它會容易得多。
與其依賴於使用當前搜索者的輸入及其特定結果來生成過濾器列表的算法,您可以使用所有用戶最常執行的搜索的聚合,然後使用它們標記結果(如果它們匹配)。
您最終會得到一個表格(或其他東西)的URL以多對多的方式加入到一個標記表中,這樣每個結果url可以有多個合適的標記。
當用戶搜索時,您只需將其搜索與完整索引進行匹配即可。但是對於過濾器,您可以從當前結果集中獲取最佳結果。
如果需要,我將處理查詢示例。
根據什麼對它們進行聚類?對你來說什麼是有意義的團體? – netcoder
請定義「有意義的命名組」。 – hakre
@netcoder:在通用的集羣庫中,這應該不重要。功能的選擇應該決定生產什麼樣的組。 –