Como buscar patrones de texto con Google Apps Script


Hace poco me llegó una oferta de fiverr que me pareció interesante. El problema es que el comprador a última hora se tiró para atrás, pero me dejó un buen proyecto que quiero explicaros.

La idea del proyecto es un sistema que dada una palabra, busque rimas dentro de frases hechas y cambie unas palabras por otras. Me pareció una idea original ( aunque ya hay alguna cosa por internet)  y con una gran componente didáctica para aprender como tratar cadenas de texto, reemplazar palabras y buscar patrones con Google Apps Script.

Os dejo con el código... no es complicado, pero preguntad todo lo que os apetezca que para eso estamos.

index.html  ( el css poned el que más os plazca)

<html>
  <head>
    <base target="_top">
   <script>
 
    function Draw(value)
    {
         document.getElementById("container").innerHTML = value;
    }
   
    function GeneratePuns()
    {
         google.script.run.withSuccessHandler(Draw).GeneratePuns(document.getElementById("txt").value);
    }
   
  </script>
  </head>
 
  <body>
     <input id="txt" class="txt" type="text" name="puns">
     <button class="btn" onClick="GeneratePuns()"> Generar Juego de Palabras </button>
   
     <div id="container">
     </div>
  </body>
</html>

Código.gs
function doGet()
{
   return HtmlService.createHtmlOutputFromFile("index");
}

function GetPattern(cadena)
{
   var separador = "";
   var array = cadena.split(separador);
  
  var patron = new Array();
 
  for( var i in array)
  {
     switch( array[i] )
     {
       case 'a':
       case 'e':
       case 'i':
       case 'o':
       case 'u':
         patron.push(array[i]);
       break;
     }
  }

  return patron;
 
}

function CompareArrays(array1,array2)
{
    var cont1 = 0 , cont2 = 0 ;
    for(var i in array1)
    {
       if( array1[i] != array2[i] )
         return false;
     
       cont1++;
    }
   
    for(var i in array2)
    {
      cont2++;
    }
 
    if(cont1 != cont2)
       return false;
 
    return true;
}

function GenerateWord(original,word)
{
   var separador = "";
   var accept_last_letter = false;
   var array = original.split(separador);
   var last = array[array.length-1];
   switch( last )
  {
       case 'a':
       case 'e':
       case 'i':
       case 'o':
       case 'u':
         accept_last_letter = true;
       break;
  }
 
 
   if( accept_last_letter )
   {
     var array = word.split(separador);
     var last = array[array.length-1];
 
     switch( last )
     {
         case 'a':
         case 'e':
         case 'i':
         case 'o':
         case 'u':
         break;
     
        default:
         array.length--;
        break;
     }
  }
 
  word = word.slice(0,array.length);
  
  return word;
}

function GeneratePuns(word)
{
   var values = SpreadsheetApp.openByUrl("ARCHIVO_DONDE_HAY_FRASES_HECHAS").getActiveSheet().getDataRange().getValues();
   
   var pattern = GetPattern(word);
  
   var out = new Array();
 
   for(var i in values) 
   {
      var phrase = values[i][0];
      var words = String(phrase).split(" ");
     
      for(var j in words)
      {
         var p = GetPattern( words[j] );
        
         if( CompareArrays(p,pattern) )
         {
            var change = GenerateWord(word,words[j]);
            var res = phrase.replace(change , word);
            out.push(res);
            break;
         }
      }
   }
  
   var res = "<ol>"; 
  
   for(var i in out)
   {
      res += "<li><a>" + out[i] + "</a></li>";
   }
 
   res += "</ol>";
    
   return res;
    
}

Si queréis ver como queda el código os dejo un link donde está ejecutándose este script: Generador de frases

No hay comentarios:

Publicar un comentario

Tal vez te interese