標籤:
一:如果是小檔案,可以一次性讀入到數組中,使用方便的數組計數函數進行詞頻統計(假設檔案中內容都是空格隔開的單詞):
<?php $str = file_get_contents("/path/to/file.txt"); //get string from file preg_match_all("/\b(\w+[-]\w+)|(\w+)\b/",$str,$r); //place words into array $r - this includes hyphenated words $words = array_count_values(array_map("strtolower",$r[0])); //create new array - with case-insensitive count arsort($words); //order from high to low print_r($words)
二:如果是大檔案,讀入記憶體就不合適了,可以採用如下方法:
<?php $filename = "/path/to/file.txt"; $handle = fopen($filename,"r"); if ($handle === false) { exit; } $word = ""; while (false !== ($letter = fgetc($handle))) { if ($letter == ‘ ‘) { $results[$word]++; $word = ""; } else { $word .= $letter; } } fclose($handle); print_r($results);
Linux命令經典面試題:統計檔案中出現次數最多的前10個單詞
使用linux命令或者shell實現:檔案words存放英文單詞,格式為每行一個英文單詞(單詞可以重複),統計這個檔案中出現次數最多的前10個單詞。
cat words.txt | sort | uniq -c | sort -k1,1nr | head -10
主要考察對sort、uniq命令的使用,相關解釋如下,命令及參數的詳細說明請自行通過man查看,簡單介紹下以上指令各部分的功能:
sort: 對單詞進行排序
uniq -c: 顯示唯一的行,並在每行行首加上本行在檔案中出現的次數
sort -k1,1nr: 按照第一個欄位,數值排序,且為逆序
head -10: 取前10行資料
PHP:計算檔案或數組中單詞出現頻率