Filtro Gramatical em PHP

2 minutos de leitura

Atualizado em:

Função em PHP que corrige alguns erros gramaticais mais comuns em um texto, muito útil em formulários em que qualquer um pessoa enviar seu conteúdo, atualmente contém essas funcionalidades:

- Transforma palavras maiúscula em minúscula;
- Inicia as sentenças com a primeira letra maiúscula;
- Adicionar espaços depois das pontuações e remover antes (ex: teste ,teste -> teste, teste);
- Corrige parênteses (ex: ( teste ) -> (teste));
- Remove mais de um ponto de exclamação ou interrogação;
- Remover espaços em branco extras;
- Expandir palavras abreviadas (ex: vc -> você);

Demonstração:

Clique aqui para ver uma demonstração do filtro gramatical

Código:

###########################################
# Paulo Collares Moreira Neto
# 27 de dezembro de 2011
# www.paulocollares.com.br
###########################################

//Esta Função transforma o texto em minúsculo respeitando a acentuação
function str_minuscula($texto) { 
    $texto = strtr(strtolower($texto),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞßÇ","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿç"); 
    return $texto; 
} 

//Esta Função transforma o texto em maiúsculo respeitando a acentuação
function str_maiuscula($texto) { 
    $texto = strtr(strtoupper($texto),"àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿç","ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞßÇ"); 
    return $texto; 
} 

//Esta Função transforma a primeira letra do texto em maiúsculo respeitando a acentuação
function primaira_maiuscula($texto) { 
    $texto = strtr(ucfirst($texto),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞßÇ","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿç"); 
    return $texto; 
} 

//Verifica se a palavra está toda em maiúscula
function comparaPalavraMaiuscula($palavra){
	
$palavra=str_replace(" ","",$palavra);

if ($palavra=="") return false;
if ($palavra=="[:p:]")  return false;
if (strlen($palavra)<=1) return false;

$palavra=ereg_replace("[^a-zA-Z0-9]", "", strtr($palavra, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));

if ($palavra == str_maiuscula($palavra))
	return true;

return false;
}


/////////////////////////////////
//Filtro
/////////////////////////////////

function filtro($texto){
	
	//Variáveis
	$pontuacoes=array(",",".","!","?",";");
	
	$array_abreviado=array("vc","tb","jesus","naum","ñ","pq");
	$array_abr_certo=array("você","também","Jesus","não","não","porque");

	//Prepara paragrafo
	$texto=str_replace("
","[:p:]",$texto);

	//acerta maiúscula e minúscula e inicia as sentenças com a primeira letra maiúscula
	$array=explode(" ",$texto);
	$novo_texto="";
	$tam_array=count($array);

	for ($i=0;$i<$tam_array;$i++){
		$palavra=$array[$i];	

		if(comparaPalavraMaiuscula($palavra)) 
			$nova_palavra=str_minuscula($palavra);
		else
			$nova_palavra=$palavra;
	
		$caracter_anterior=substr($array[$i-1],-1);
		$caracter_anterior_paragrafo=substr($array[$i-1],-5);

		if ($caracter_anterior=="." || $caracter_anterior=="!" || $caracter_anterior=="?" || $caracter_anterior_paragrafo=="[:p:]" || $i==0)
			$nova_palavra=primaira_maiuscula($nova_palavra);
	
		$novo_texto.=$nova_palavra." ";
	}

	$texto=$novo_texto;

	//Adicionar espaçoes depois das pontuações e remover antes
	for ($i=0;$i<count($pontuacoes);$i++){
		$ponto=$pontuacoes[$i];
		$texto=str_replace(" ".$ponto." ",$ponto." ",$texto);
		$texto=str_replace(" ".$ponto,$ponto." ",$texto);
		$texto=str_replace($ponto,$ponto." ",$texto);
	}

	//acerta parênteses
	$texto=str_replace(" ( "," (",$texto);
	$texto=str_replace("( "," (",$texto);
	$texto=str_replace("("," (",$texto);
	$texto=str_replace(" ) ",") ",$texto);
	$texto=str_replace(" )",") ",$texto);
	$texto=str_replace(")",") ",$texto);

	//acerta redicencias
	$texto=str_replace(". . .","...",$texto);

	//remove mais de uma ! e ?
	$texto=str_replace("! ! ! ","!",$texto);
	$texto=str_replace("! ! ","!",$texto);
	$texto=str_replace("!!","!",$texto);
	$texto=str_replace("? ? ? ","?",$texto);
	$texto=str_replace("? ? ","?",$texto);
	$texto=str_replace("??","?",$texto);

	//remover espaçoes em branco extras
	$texto=str_replace("   "," ",$texto);
	$texto=str_replace("  "," ",$texto);
	$texto=str_replace("  "," ",$texto);

	//Adicionar paragrafo
	$texto=str_replace("\n","",$texto);
	$texto=str_replace("\r","",$texto);

	for ($i=0;$i<=10;$i++)
		$texto=str_replace("[:p:][:p:]","[:p:]",$texto);

	$array=explode("[:p:]",$texto);
	$novo_texto="";
	$tam_array=count($array);
	for ($i=0;$i<$tam_array;$i++){
		$paragrafo=$array[$i];	
	
		$paragrafo=trim($paragrafo);
		$paragrafo=trim($paragrafo,",");
		$paragrafo=primaira_maiuscula($paragrafo);
	
		if ($paragrafo=="") break;

		$ultimo_caracter=substr($paragrafo,-1);

		if ($ultimo_caracter!='.' && $ultimo_caracter!='!' && $ultimo_caracter!='?' && $ultimo_caracter!=':' && $ultimo_caracter!=';')
			$paragrafo.=".";

		if ($i!=$tam_array)
			$novo_texto.=$paragrafo."

";

	}

	$texto=$novo_texto;


	//Expandir palavras abreviadas
	$texto=str_replace($array_abreviado,$array_abr_certo,$texto);


	return $texto;

}

Exemplo de uso:

echo filtro("texto");

[]`s

Deixe um comentário