php英文單詞統(tǒng)計器
本文實例為大家分享了英文單詞統(tǒng)計器php 實現(xiàn),供大家參考,具體內(nèi)容如下
程序開始運行, 按"瀏覽"鈕選擇一個英文文檔, 再按"統(tǒng)計 Statistics"鈕, 即可得到按字母順序列出的所有單詞,及其出現(xiàn)的次數(shù)
用于測試的數(shù)據(jù)文檔: data.txt
驅(qū)動程序:word.php
output.php 和 StringTokenizer.php 是 要求在同一個文件夾中的程序
1. words_statistics_PHP.png
2. word.php
<html> <style> td{ background-color:#CF6; width:100px; margin:5px; } </style> <body> <?php /** * 程序開始運行, 按"瀏覽"鈕選擇一個英文文檔, 再按"統(tǒng)計"鈕, * 即可得到按字母順序列出的所有單詞,及其出現(xiàn)的次數(shù) * * 作者: 許同春 author Tongchun Xu * @開源中國 Open Source, Chna communiity * 完成日期:2016年6月10日 completion date: 10 June, 2016 */ require("StringTokenizer.php"); require("output.php"); if($_POST['submit']){ if ($_FILES["file"]["error"] > 0) echo "Error: " . $_FILES["file"]["error"] . "<br />"; else { $myfile = fopen($_FILES["file"]["tmp_name"], "r") or die("Unable to open file!"); $str = fread($myfile,filesize($_FILES["file"]["tmp_name"])); $delim = "?\\,. /:!\"()\t\n\r\f%"; $st = new StringTokenizer($str, $delim); echo '找到字符串: '.$st->countTokens(); $list=new LinkedList(); while ($st->hasMoreTokens()) { $list->orderInsert($st->nextToken()); } $list->words_count(); $list->traversal(); fclose($myfile); } } ?> <h2>英文文檔單詞統(tǒng)計 Statistics on English words </h2> <p>程序開始運行, 按"瀏覽"鈕選擇一個英文文檔, 再按"統(tǒng)計 Statistics"鈕, 即可得到按字母順序列出的所有單詞,及其出現(xiàn)的次數(shù) </p> <form action="word.php" method="post" enctype="multipart/form-data"> <label for="file">英文文檔名 File Name:</label> <input type="file" name="file" id="file" /> <input type="submit" name="submit" value="統(tǒng)計 Statistics" /> </form> </body> </html>
3. output.php
<meta charset="utf-8" /> <? /** * The class LinkedList allows an application to store strings in * alphabetical order by calling orderInsert(). * 此處定義的 LinkedList 類,可以調(diào)用它的 方法 orderInsert(),來以字母 * 大小的順序儲存 英文字符串。 * 同時記錄 英文單詞出現(xiàn)的次數(shù) * 作者: 許同春 author Tongchun Xu * @開源中國 Open Source, China communiity * 完成日期:2016年6月10日 completion date: 10 June, 2016 */ class Node{ public $data; public $frequency; public $next; function __construct($data, $next = null, $frequency = 1){ $this->data = $data; //英文字符串 $this->next = $next; //指向后繼結(jié)點的指針 $this->frequency=$frequency; //英文字符串出現(xiàn)的次數(shù) } } class LinkedList{ private $head; //單鏈表的頭結(jié)點,不存儲數(shù)據(jù) function __construct(){//單鏈表的構(gòu)造方法 //頭結(jié)點的數(shù)據(jù)為"傀儡", 不代表 任何數(shù)據(jù) $this->head = new Node("dummy 傀儡"); $this->first = null; } function isEmpty(){ return ($this->head->next == null); } /* orderInsert($data) 方法, * 按給定字符串 $data 的大小, 將其安插到適當?shù)奈恢茫? * 以保證單鏈表中字符串的存儲,始終是有序的。 */ function orderInsert($data){ $p = new Node($data); if($this->isEmpty()){ $this->head->next = $p; } else { $node= $this->find($data); if(!$node){ $q = $this->head; while($q->next != NULL && strcmp($data, $q->next->data)> 0 ){ $q = $q->next; } $p->next = $q->next; $q->next = $p; }else $node->frequency++; } } function insertLast($data){//將字符串插到單鏈表的尾部 $p = new Node($data); if($this->isEmpty()){ $this->head->next = $p; } else{ $q = $this->head->next; while($q->next != NULL) $q = $q->next; $q->next = $p; } } function find($value){//查詢是否有給定的字符串 $q = $this->head->next; while($q->next != null){ if(strcmp($q->data,$value)==0){ break; } $q = $q->next; } if ($q->data == $value) return $q; else return null; } function traversal(){//遍歷單鏈表 if(!$this->isEmpty()){ $p=$this->head->next; echo "輸出結(jié)果:<table><tr>"; echo "<td>".$p->data."<br>出現(xiàn)次數(shù):".$p->frequency."</td>"; $n=1; while($p->next != null){ $p=$p->next; echo "<td>".$p->data."<br>出現(xiàn)次數(shù):".$p->frequency."</td>"; $n++; if ($n%11==0) echo "</tr><tr>"; } echo "</tr></table>"; }else echo "鏈表為空!"; } function words_count(){ if($this->isEmpty()) echo "<br>沒有儲存字符串 <br>"; else{ $counter=0; $p=$this->head->next; while($p->next != null){ $p=$p->next; $counter++; }; echo "***共有單詞 ".$counter." 個***"; } }} ?>
4. StringTokenizer.php
<?php /** * The string tokenizer class allows an application to break a string into tokens. * * @author Azeem Michael * @example The following is one example of the use of the tokenizer. The code: * <code> * <?php * $str = "this is:@\t\n a test!"; * $delim = " !@:'\t\n\0"; // remove these chars * $st = new StringTokenizer($str, $delim); * echo 'Total tokens: '.$st->countTokens().'<br/>'; * while ($st->hasMoreTokens()) { * echo $st->nextToken() . '<br/>'; * } * prints the following output: * Total tokens: 4 * this * is * a * test * ?> * </code> */ class StringTokenizer { /** @var string */ private $string; /** @var string */ private $token; /** @var string */ private $delim; /** * Constructs a string tokenizer for the specified string. * @param string $str String to tokenize * @param string $delim The set of delimiters (the characters that separate tokens) * specified at creation time, default to " \n\r\t\0" */ public function __construct($str, $delim=" \n\r\t\0") { $this->string = $str; $this->delim = $delim; $this->token = strtok($str, $delim); } /** * Destructor to prevent memory leaks */ public function __destruct() { unset($this); } /** * Calculates the number of times that this tokenizer's nextToken method can * be called before it generates an exception * @return int - number of tokens */ public function countTokens() { $counter = 0; while($this->hasMoreTokens()) { $counter++; $this->nextToken(); } $this->token = strtok($this->string, $this->delim); return $counter; } /** * Tests if there are more tokens available from this tokenizer's string. It * does not move the internal pointer in any way. To move the internal pointer * to the next element call nextToken() * @return boolean - true if has more tokens, false otherwise */ public function hasMoreTokens() { return ($this->token !== false); } /** * Returns the next token from this string tokenizer and advances the internal * pointer by one. * @return string - next element in the tokenized string */ public function nextToken() { $hold = $this->token; //hold current pointer value $this->token = strtok($this->delim); //increment pointer return $hold; //return current pointer value } } ?>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- PHP統(tǒng)計數(shù)值數(shù)組中出現(xiàn)頻率最多的10個數(shù)字的方法
- PHP實現(xiàn)統(tǒng)計在線人數(shù)功能示例
- php版微信數(shù)據(jù)統(tǒng)計接口用法示例
- php簡單統(tǒng)計中文個數(shù)的方法
- php使用文本統(tǒng)計訪問量的方法
- PHP統(tǒng)計二維數(shù)組元素個數(shù)的方法
- 也談php網(wǎng)站在線人數(shù)統(tǒng)計
- php精確的統(tǒng)計在線人數(shù)的方法
- php中3種方法統(tǒng)計字符串中每種字符的個數(shù)并排序
- php計算數(shù)組不為空元素個數(shù)的方法
- php統(tǒng)計數(shù)組元素個數(shù)的方法
- 使用php統(tǒng)計字符串中中英文字符的個數(shù)
- PHP編程計算文件或數(shù)組中單詞出現(xiàn)頻率的方法
相關文章
php+redis在實際項目中HTTP 500: Internal Server Error故障排除
用戶量快速增長,訪問量在短時間內(nèi)翻倍,由于前期容量規(guī)劃做得比較好,硬件資源可以支撐,可是軟件系統(tǒng)方面出現(xiàn)了大問題:40% 的請求都會返回 HTTP 500: Internal Server Error2017-02-02使用PHP實現(xiàn)密??üδ軐崿F(xiàn)代碼<打包下載直接運行>
PHP實現(xiàn)密保卡功能實現(xiàn)代碼,腳本之家提供下載可以直接運行的~!不需要數(shù)據(jù)庫也不需要其他的,下載解壓直接放環(huán)境中就可以看到效果2011-10-10php文件包含目錄配置open_basedir的使用與性能詳解
下面小編就為大家?guī)硪黄猵hp文件包含目錄配置open_basedir的使用與性能詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04PHP獲取數(shù)組表示的路徑方法分析【數(shù)組轉(zhuǎn)字符串】
這篇文章主要介紹了PHP獲取數(shù)組表示的路徑,結(jié)合實例形式對比分析了數(shù)組轉(zhuǎn)字符串的實現(xiàn)技巧,需要的朋友可以參考下2017-09-09PHP使用zlib擴展實現(xiàn)GZIP壓縮輸出的方法詳解
這篇文章主要介紹了PHP使用zlib擴展實現(xiàn)GZIP壓縮輸出的方法,結(jié)合實例形式詳細分析了php gzip配置及壓縮輸出的相關操作技巧,需要的朋友可以參考下2018-04-04