2011-01-28 82 views
8

我想要一個特定的實現,使得用戶提供類似的文本塊:提取相關標籤/從文本塊關鍵詞

「的要求 - 使用Linux操作系統,Apache 2的工作知識,在LAMP環境, 的MySQL 5和PHP 5, - Web 2.0的知識標準 - 舒適的使用JSON - 跨瀏覽器的JavaScript編程和jQuery等 - - 知識版本控制軟件如與框架,Zend公司,哎呀 工作經驗手子版本將是 更可取。「

我想要做的是自動選擇相關的關鍵字,並創建標籤/關鍵詞,因此,對於上述一段文字,有關標籤應該是:MySQL和PHP,JSON,jQuery的,版本控制,空中接力,WEB2 2.0,JavaScript的

我怎麼能去約在PHP/javascript等等這樣做呢? headstart會很有幫助。

回答

2

這並不容易,因爲它需要某種類型的模糊邏輯。您應該使用雅虎期限提取YQL

檢查出來:link

+0

感謝您的鏈接,我期待這樣的事情。我嘗試了YQL,但不知何故它並沒有認識到很多條款。找到這個名爲Zemanta的網站,這有點不錯,我打算使用這兩個網站併合並我的結果。 – sgomez 2011-01-29 17:42:26

+0

這是我在互聯網上發現的最棒的東西,用了5年左右......謝謝 – AMB 2014-07-24 05:37:49

0

根據您是否要顯示客戶的關鍵字/標記,還是你想從文本中提取的,然後做塊的關鍵字/標籤與他們進一步計算。

如果您只需要顯示它們,那麼客戶端處理就沒有問題。如果您需要它們進行進一步計算,請使用服務器端處理。

我可以推薦一個JavaScript客戶端實現,如果你可以提供一些更多的細節。如果你想一般「知道」,那麼關鍵字某種巧妙的解決方案是neccesary

如果你有一個關鍵字列表,那麼你可以使用regular expressions提取數據

+1

感謝您的回覆。你能推薦一個客戶端實施嗎?我想要的是,當用戶填充一段文本時,應該從中提取相關標籤。 – sgomez 2011-01-29 17:43:04

16

一個非常幼稚的方法是去除常見stopwords從文本,讓你與像「標準」,「JSON」等更有意義的話,你仍然會得到大量的噪音,但是,這樣你就可以考慮像OpenCalais一個服務,可以做你的文字相當複雜的分析。

更新:

好吧,在我以前的答案的鏈接指向實現,但你問一個這麼簡單的一個是在這裏:

function stopWords($text, $stopwords) { 

    // Remove line breaks and spaces from stopwords 
    $stopwords = array_map(function($x){return trim(strtolower($x));}, $stopwords); 

    // Replace all non-word chars with comma 
    $pattern = '/[0-9\W]/'; 
    $text = preg_replace($pattern, ',', $text); 

    // Create an array from $text 
    $text_array = explode(",",$text); 

    // remove whitespace and lowercase words in $text 
    $text_array = array_map(function($x){return trim(strtolower($x));}, $text_array); 

    foreach ($text_array as $term) { 
    if (!in_array($term, $stopwords)) { 
     $keywords[] = $term; 
    } 
    }; 

    return array_filter($keywords); 
} 

$stopwords = file('stop_words.txt'); 
$text = "Requirements - Working knowledge, on LAMP Environment using Linux, Apache 2, MySQL 5 and PHP 5, - Knowledge of Web 2.0 Standards - Comfortable with JSON - Hands on Experience on working with Frameworks, Zend, OOPs - Cross Browser Javascripting, JQuery etc. - Knowledge of Version Control Software such as sub-version will be preferable."; 

print_r(stopWords($text, $stopwords)); 

你可以看到這一點,和在此Giststop_word.txt內容。

運行上面的你的示例文本生成以下數組:

Array 
(
    [0] => requirements 
    [4] => linux 
    [6] => apache 
    [10] => mysql 
    [13] => php 
    [25] => json 
    [28] => frameworks 
    [30] => zend 
    [34] => browser 
    [35] => javascripting 
    [37] => jquery 
    [38] => etc 
    [42] => software 
    [43] => preferable 
) 

所以,就像我說的,這是有點幼稚,可以使用更多的優化(加上它的速度慢),但它並拔出更多的您的文字中的相關關鍵字。您需要對停用詞進行微調。捕獲像Web 2.0這樣的術語將會非常困難,所以我認爲,如果使用像OpenCalais這樣可以理解文本並返回實體和引用列表的嚴肅服務,它會更好。 DocumentCloud依靠這項服務從文檔中收集信息。

此外,對於客戶端實現,你可以做幾乎同樣的事情用JavaScript,而且可能更清潔的(雖然它可能是客戶端慢。)