温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php如何实现英文单词统计器

发布时间:2021-08-31 13:57:18 来源:亿速云 阅读:259 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“php如何实现英文单词统计器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php如何实现英文单词统计器”这篇文章吧。

具体内容如下

程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计 Statistics"钮, 即可得到按字母顺序列出的所有单词,及其出现的次数
用于测试的数据文档: data.txt
驱动程序:word.php
output.php 和 StringTokenizer.php 是 要求在同一个文件夹中的程序
1. words_statistics_PHP.png   

php如何实现英文单词统计器

2. word.php

<html> <style> td{   background-color:#CF6;   width:100px;   margin:5px; } </style> <body> <?php /**  * 程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计"钮,  * 即可得到按字母顺序列出的所有单词,及其出现的次数  *   * 作者: 许同春 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);   } } ?> <h3>英文文档单词统计 Statistics on English words </h3> <p>程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计 Statistics"钮,  即可得到按字母顺序列出的所有单词,及其出现的次数 </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="统计 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 类,可以调用它的 方法 orderInsert(),来以字母  * 大小的顺序储存 英文字符串。  * 同时记录 英文单词出现的次数  * 作者: 许同春 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; //指向后继结点的指针     $this->frequency=$frequency; //英文字符串出现的次数   }   }   class LinkedList{   private $head; //单链表的头结点,不存储数据  function __construct(){//单链表的构造方法   //头结点的数据为"傀儡", 不代表 任何数据   $this->head = new Node("dummy 傀儡");    $this->first = null;   }    function isEmpty(){      return ($this->head->next == null);   }   /* orderInsert($data) 方法,   * 按给定字符串 $data 的大小, 将其安插到适当的位置,    * 以保证单链表中字符串的存储,始终是有序的。   */  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 "输出结果:<table><tr>";     echo "<td>".$p->data."<br>出现次数:".$p->frequency."</td>";     $n=1;     while($p->next != null){       $p=$p->next;       echo "<td>".$p->data."<br>出现次数:".$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   } } ?>

以上是“php如何实现英文单词统计器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI