找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 612|回复: 0
打印 上一主题 下一主题

php英文单词统计器

[复制链接]

2588

主题

2588

帖子

7694

积分

论坛元老

Rank: 8Rank: 8

积分
7694
跳转到指定楼层
楼主
发表于 2018-2-14 05:35:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            本文实例为大家分享了英文单词统计器php 实现,供大家参考,具体内容如下
程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计 Statistics"钮, 即可得到按字母顺序列出的所有单词,及其出现的次数
用于测试的数据文档: data.txt
驱动程序:word.php
output.php 和 StringTokenizer.php 是 要求在同一个文件夹中的程序
1. words_statistics_PHP.png   

2. word.php

td{
  background-color:#CF6;
  width:100px;
  margin:5px;
}

0)
  echo "Error: " . $_FILES["file"]["error"] . "
";
  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);
  }
}
?>
英文文档单词统计 Statistics on English words
程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计 Statistics"钮,
即可得到按字母顺序列出的所有单词,及其出现的次数

英文文档名 File Name:



3. output.php

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 "输出结果:";
    echo "".$p->data."
出现次数:".$p->frequency."";
    $n=1;
    while($p->next != null){
      $p=$p->next;
      echo "".$p->data."
出现次数:".$p->frequency."";
      $n++;
      if ($n%11==0) echo "";
      }
      
      echo "";      
    }else
    echo "链表为空!";
  }
   
   
  function words_count(){
  if($this->isEmpty())
  echo "
没有储存字符串
";
    else{
  $counter=0;
  $p=$this->head->next;
  while($p->next != null){
  $p=$p->next;
  $counter++;
      };
  echo "***共有单词 ".$counter." 个***";
    }
  }}
?>
4. StringTokenizer.php

* countTokens().'
';
* while ($st->hasMoreTokens()) {
* echo $st->nextToken() . '
';
* }
* prints the following output:
* Total tokens: 4
* this
* is
* a
* test
* ?>
*
*/
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网站在线人数统计
  • php中3种方法统计字符串中每种字符的个数并排序
  • 使用php统计字符串中中英文字符的个数
  • PHP统计二维数组元素个数的方法
  • php计算数组不为空元素个数的方法
  • PHP统计数值数组中出现频率最多的10个数字的方法
  • php统计数组元素个数的方法
  • php精确的统计在线人数的方法
  • php使用文本统计访问量的方法
  • php简单统计中文个数的方法
  • php版微信数据统计接口用法示例
  • PHP实现统计在线人数功能示例
  • PHP编程计算文件或数组中单词出现频率的方法
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端