Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sapinn

Diferença entre textos(strings) em PHP

Recommended Posts

Salve comunidade! Volto aqui com uma dúvida que está persistindo. Estou desenvolvendo um site de redações online em que o professor corrigi e a correção fica estacada

Exemplo:

Eu gosta mas de você.

Quando ele for ver a correção terá:

Eu gosto mas(o correto seria "mais") de você.

O problema é que quando é um texto muito grande como uma redação ele além de marcar a diferença entre os textos marca outras palavras.

Talvez haja um problema no código ou fazer isso seja impossivel mas eu queria basicamente o que o site https://clevert.com.br/comp/ faz.

Alguém me ajuda ai na moral.

Aqui está meu código:

<?php
            $id = $_GET['id'];
            $pega = mysql_query("select * from correcao where codigo_redacao='$id'")or die(mysql_error());
            $linhacorrecao = mysql_fetch_assoc($pega);
            ?>

            <?php

function get_str_difs($str1, $str2) {
$first = explode(" ", $str1);
$second = explode(" ", $str2);
$arrDif1 = array_diff($first,$second);
$arrDif2 = array_diff($second,$first);
 
$old = '';
$new = '';
foreach($first as $word) {
if(in_array($word,$arrDif1)) {
$old .= "<del style='background-color:#ffcccc'>" . $word . "</del> ";
continue;
}
$old .= $word . " ";
}
foreach($second as $word) {
if(in_array($word,$arrDif2)) {
$new .= "<b style='color:red;'> " . $word . " </b>";
continue;
}
$new .= $word . " ";
}
return array('old' => $old, 'new' => $new);
}
$str1 = $linha['redacao'];
$str2 = $linhacorrecao['correcao'];
$difs = get_str_difs($str1, $str2);
echo '  <center><div class="correcao" name="redacao" rows="30" cols="100">'.$difs['new']. '</div></center>';
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, Sapinn disse:

O problema é que quando é um texto muito grande como uma redação ele além de marcar a diferença entre os textos marca outras palavras.

Essa explicação é confusa. Qual o significado de "entre os textos" e de "outras palavras".

Faça o seguinte:
Poste um trecho da redação original e o mesmo trecho corrigido, assinalando "a diferença entre textos" (o que é de se esperar do script) e "outras palavras" (o que não deveria aparecer como correção).

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 06/09/2019 at 17:53, Maujor disse:

Essa explicação é confusa. Qual o significado de "entre os textos" e de "outras palavras".

Faça o seguinte:
Poste um trecho da redação original e o mesmo trecho corrigido, assinalando "a diferença entre textos" (o que é de se esperar do script) e "outras palavras" (o que não deveria aparecer como correção).

Olá Maujor vou explicar novamente, eu já sabia que as pessoas não iam intender minha explicação.

Vamos lá:

Digamos que eu tenha um trecho de uma redação assim:

Precoceito é uma opinião que formamos das pessoas antes de conhecê-las.É um jugamento apressado e superficial e muto perigoso, pois ao invés de melhorar a nosa vida e da sociedade, acaba trazendo muitas situações complicadas e até mesmo violentoos.

 

Após a correção da professora deveria ficar assim:

Preconceito é uma opinião que formamos das pessoas antes de conhecê-las.É um julgamento apressado e superficial e muito perigoso, pois ao invés de melhorar a nossa vida e da sociedade, acaba trazendo muitas situações complicadas e até mesmo violentas.

 

Entretanto, outras palavras que não foram modificadas também ficam marcadas, exemplo:

Preconceito é uma opinião que formamos das pessoas antes de conhecê-las.É um julgamento apressado e superficial e muito perigoso, pois ao invés de melhorar a nossa vida e da sociedade, acaba trazendo muitas situações complicadas e até mesmo violentas.

E caso a professora acrescente um comentário algumas outras redações não ficam marcadas, exemplo:

Preconceito é uma opinião que formamos das pessoas antes de conhecê-las.É um julgamento (Julgamento possui L)apressado e superficial e muito perigoso, pois ao invés de melhorar a nossa vida e da sociedade, acaba trazendo muitas situações complicadas e até mesmo violentas.(Você digitou a palavra violentas errado)

 

Queia que ficasse marcado igual a esse site:  https://clevert.com.br/comp/

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Sapinn

Reproduzi seu script aqui e não deu erro.
Acredito que $str1 é a redação original e $str2 a redação corrigida armazenadas no Banco de Dados.
Substitui a consulta ao Banco de Dados pelas redações que você postou como exemplo e não deu erro.

Coloque o seu código conforme adaptei para testes e mostrado a seguir em um arquivo PHP e veja o resultado no navegador.

 

...
<body>
<?php
  // $id = $_GET['id'];
  // $pega = mysql_query("select * from correcao where codigo_redacao='$id'")or die(mysql_error());
  // $linhacorrecao = mysql_fetch_assoc($pega);
?>
<?php
$str1 = "Precoceito é uma opinião que formamos das pessoas antes de conhecê-las.É um jugamento apressado e superficial e muto perigoso, pois ao invés de melhorar a nosa vida e da sociedade, acaba trazendo muitas situações complicadas e até mesmo violentoos.";
$str2 = "Preconceito é uma opinião que formamos das pessoas antes de conhecê-las.É um julgamento apressado e superficial e muito perigoso, pois ao invés de melhorar a nossa vida e da sociedade, acaba trazendo muitas situações complicadas e até mesmo violentas.";

function get_str_difs($str1, $str2) {
  $first = explode(" ", $str1);
  $second = explode(" ", $str2);
  $arrDif1 = array_diff($first,$second);
  $arrDif2 = array_diff($second,$first);
  $old = '';
  $new = '';
    foreach($first as $word) {
      if(in_array($word,$arrDif1)) {
      $old .= "<span style='color: red; background-color:#dedede;'>" . $word . "</span> ";
      continue;
      }
      $old .= $word . " ";
    }
    foreach($second as $word) {
      if(in_array($word,$arrDif2)) {
      $new .= "<span style='color: green;background-color:#dedede;'> " . $word . " </span>";
      continue;
      }

      $new .= $word . " ";
    }
  return array('old' => $old, 'new' => $new);
  }
  // $str1 = $linha['redacao'];
  // $str2 = $linhacorrecao['correcao'];
  $difs = get_str_difs($str1, $str2);
?>
<div style="width:100%;max-width:1000px;overflow:auto;border:5px solid #d1d1d1;padding: 8px 15px;">
<p  style="margin:5px 0;">Legenda: <span style="color: red; background-color:#dedede;">Texto original</span>; <span style="color: green;background-color:#dedede;">Texto corrigido</span></p>
  <div style="width: 50%; float:left; border-right:10px solid #dedede; padding-right: 10px; box-sizing: border-box;">
    <h4 style="margin:5px 0;">Redação</h4>
    <?php echo $difs['old']; ?>
  </div>
  <div placeholder="Correção" style="width: 50%; float:left;  padding-left: 10px; box-sizing: border-box;">
    <h4 style="margin:5px 0;">Correção</h4>
    <?php  echo $difs['new']; ?>
  </div>
</div>
</body>
</html>

Nota: A estilização inline poderá (deverá) ser substituida por classes e passada para uma folha de estilos.

 

Observe uma imagem mostrando a renderezição do meu teste:

forum.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.