溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php如何實現(xiàn)英文單詞統(tǒng)計器

發(fā)布時間:2021-08-31 13:57:18 來源:億速云 閱讀:212 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“php如何實現(xiàn)英文單詞統(tǒng)計器”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“php如何實現(xiàn)英文單詞統(tǒng)計器”這篇文章吧。

具體內(nèi)容如下

程序開始運行, 按"瀏覽"鈕選擇一個英文文檔, 再按"統(tǒng)計 Statistics"鈕, 即可得到按字母順序列出的所有單詞,及其出現(xiàn)的次數(shù)
用于測試的數(shù)據(jù)文檔: data.txt
驅(qū)動程序:word.php
output.php 和 StringTokenizer.php 是 要求在同一個文件夾中的程序
1. words_statistics_PHP.png   

php如何實現(xiàn)英文單詞統(tǒng)計器

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);
  }
}
?>
<h3>英文文檔單詞統(tǒng)計 Statistics on English words </h3>
<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 的大小, 將其安插到適當(dāng)?shù)奈恢茫?nbsp; 
 * 以保證單鏈表中字符串的存儲,始終是有序的。 
 */
 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
  }
}
?>

以上是“php如何實現(xiàn)英文單詞統(tǒng)計器”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI