<?php
/**
*
* PHP Version 5.5
* Classe de controle e contagem de palavras.
*
* @author Felipe Francisco <felipefrancisco@outlook.com>
* @example Exemplo da estrutura JSON utilizada nessa classe:
*
* {
* [0] => (
* ['palavras'] => (
* ['palavra_1'] => 5,
* ['palavra_2'] => 8,
* ['palavra_3'] => 1
* ),
* ['total'] = '14'
* ),
* [1] => (
* ['palavras'] => (
* ['palavra_3'] => 3,
* ['palavra_4'] => 6,
* ['palavra_5'] => 10
* ),
* ['total'] = '19'
* ),
* ['total_de_palavras'] => '33'
* }
*/
namespace JSON;
class Texto {
/**
* Vetor com todos os textos recebidos.
* @var string[]
*/
private $textos = [];
/**
* Estrutura que será transformado em JSON.
* @var string[]
*/
private $retorno = [];
/**
* Total de Palavras encontradas nos textos.
* @var integer
*/
private static $totalPalavras;
/**
* Recebe a variável com o texto ou o conjunto de textos
* e inicia o processo para contar e separar as palavras.
*
* @param string/string[] $textos (Texto ou vetor de textos)
*/
public function __construct($textos = null) {
# Recebe automaticamente a variável caso ela não seja passada pelo argumento.
if(!$textos)
$textos = $_POST['textos'];
# Verifica se o texto que está sendo fornecido é um texto válido.
if(is_null($textos) || empty($textos))
throw new Exception("Por favor, insira um texto com conteúdo");
# Caso o argumento recebido não seja um conjunto de textos, transforme-o em um conjunto.
if(!is_array($textos))
$this->textos[] = $texto;
# Para cada texto do conjunto, adicioná-lo ao vetor de textos.
foreach($textos as $t)
$this->adicionaTexto($t);
}
/**
* Adiciona um texto ao conjunto de textos retirando
* as possíveis tags HTML que possam existir.
*
* @param string $texto (um texto qualquer)
* @return void
*/
public function adicionaTexto($texto) {
# Retira a pontuação do texto.
$texto = preg_replace('/[\p{P}]/', "", $texto);
# Retirando qualquer tag HTML por precaução.
$this->textos[] = strtolower(strip_tags($texto));
}
/**
* Separa as palavras do texto e efetua a contagem delas
* para adquirir um número total de textos e palavras.
*
* @param integer $i [description]
*
*/
private function separaPalavras($i = 0) {
$texto = $this->textos[$i];
# Caso não existam mais textos a serem tratados, encerrar a recursão.
if(!$texto)
return;
# Separa as palavras no texto.
$palavras = explode(' ', $texto);
# Iteração entre as palavras encontradas.
foreach($palavras as $p) {
$this->retorno[$i]['palavras'][$p]++;
$this->retorno[$i]['total']++;
self::$totalPalavras++;
}
# Chama a função novamente para verificar se ainda existem textos.
$this->separaPalavras(++$i);
}
/**
* Gera o JSON das informações que estão na classe.
* @return string (textos em JSON na estrutura pré-definida)
*/
public function gerarJSON() {
# Reseta a contagem de palavras;
self::$totalPalavras = 0;
# Separa as palavras.
$this->separaPalavras();
# Criando o JSON.
$json = $this->retorno;
$json['total_de_palavras'] = self::$totalPalavras;
return json_encode($json);
}
}
error_reporting(E_ALL ^ E_NOTICE);
$textos = ['meu nome é joão', 'meu nome é Maria'];
$oTexto = new Texto($textos);
$oTexto->adicionaTexto('olá, eu sou felipe!');
$json = $oTexto->gerarJSON();
$decoded = json_decode($json);
var_dump($json);
var_dump($decoded);
Warning: Undefined array key 0 in /in/PBvAB on line 119
Warning: Undefined array key "palavras" in /in/PBvAB on line 119
Warning: Undefined array key "meu" in /in/PBvAB on line 119
Warning: Undefined array key "total" in /in/PBvAB on line 120
Warning: Undefined array key "nome" in /in/PBvAB on line 119
Warning: Undefined array key "é" in /in/PBvAB on line 119
Warning: Undefined array key "joão" in /in/PBvAB on line 119
Warning: Undefined array key 1 in /in/PBvAB on line 119
Warning: Undefined array key "palavras" in /in/PBvAB on line 119
Warning: Undefined array key "meu" in /in/PBvAB on line 119
Warning: Undefined array key "total" in /in/PBvAB on line 120
Warning: Undefined array key "nome" in /in/PBvAB on line 119
Warning: Undefined array key "é" in /in/PBvAB on line 119
Warning: Undefined array key "maria" in /in/PBvAB on line 119
Warning: Undefined array key 2 in /in/PBvAB on line 119
Warning: Undefined array key "palavras" in /in/PBvAB on line 119
Warning: Undefined array key "ol�" in /in/PBvAB on line 119
Warning: Undefined array key "total" in /in/PBvAB on line 120
Warning: Undefined array key "eu" in /in/PBvAB on line 119
Warning: Undefined array key "sou" in /in/PBvAB on line 119
Warning: Undefined array key "felipe" in /in/PBvAB on line 119
Warning: Undefined array key 3 in /in/PBvAB on line 107
bool(false)
NULL