PHP English word counter, _PHP tutorial
php英文单词统计器,
本文实例为大家分享了英文单词统计器php 实现,供大家参考,具体内容如下
程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计 Statistics"钮, 即可得到按字母顺序列出的所有单词,及其出现的次数
用于测试的数据文档: data.txt
驱动程序: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 /** * 程序开始运行, 按"浏览"钮选择一个英文文档, 再按"统计"钮, * 即可得到按字母顺序列出的所有单词,及其出现的次数 * * 作者: 许同春 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>英文文档单词统计 Statistics on English words </h2> <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 } } ?>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持帮客之家。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

In this chapter, we are going to learn the following topics related to routing ?

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Validator can be created by adding the following two lines in the controller.
