本文實例講述了PHP函數實現從一個文本字符串中提取關鍵字的方法。分享給大家供大家參考。具體分析如下:
這是一個函數定位接收一個字符串作為參數(連同其他配置可選參數),并且定位該字符串中的所有關鍵字(出現最多的詞),返回一個數組或一個字符串由逗號分隔的關鍵字。功能正常工作,但我正在改進,因此,感興趣的朋友可以提出改進意見。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 /** * Finds all of the keywords (words that appear most) on param $str * and return them in order of most occurrences to less occurrences. * @param string $str The string to search for the keywords. * @param int $minWordLen[optional] The minimun length (number of chars) of a word to be considered a keyword. * @param int $minWordOccurrences[optional] The minimun number of times a word has to appear * on param $str to be considered a keyword. * @param boolean $asArray[optional] Specifies if the function returns a string with the * keywords separated by a comma ($asArray = false) or a keywords array ($asArray = true). * @return mixed A string with keywords separated with commas if param $asArray is true, * an array with the keywords otherwise. */ function extract_keywords($str, $minWordLen = 3, $minWordOccurrences = 2, $asArray = false) { function keyword_count_sort($first, $sec) { return $sec[1] - $first[1]; } $str = preg_replace('/[^w0-9 ]/', ' ', $str); $str = trim(preg_replace('/s+/', ' ', $str)); $words = explode(' ', $str); $keywords = array(); while(($c_word = array_shift($words)) !== null) { if(strlen($c_word) <= $minWordLen) continue; $c_word = strtolower($c_word); if(array_key_exists($c_word, $keywords)) $keywords[$c_word][1]++; else $keywords[$c_word] = array($c_word, 1); } usort($keywords, 'keyword_count_sort'); $final_keywords = array(); foreach($keywords as $keyword_det) { if($keyword_det[1] < $minWordOccurrences) break; array_push($final_keywords, $keyword_det[0]); } return $asArray ? $final_keywords : implode(', ', $final_keywords); } //How to use //Basic lorem ipsum tex新聞熱點
疑難解答