lunes, 17 de octubre de 2016

Herramienta para agrupar textos semejantes

Tanto tiempo sin publicar nada, pero bueno, hoy les traigo una herramienta que realicé con googlescript para poder agrupar textos semejantes.

La base del algoritmo de comparación de textos está en el algoritmo de distancia de Levenshtein, al cual le hice algunos ajustes, el importante y a saber, la distancia ya no es un número entero, si no un valor normalizado de 0 a 1, donde 0 indica que la distancia es cero, y 1 que son totalmente diferentes. La distancia es el criterio para agrupar los textos parecidos que se hallan en una hoja cálculo, es excelente para procesar información que se recibe a través de formularios en google.

A continuación les dejo un video donde se explica su modo de uso, previo deben crear una copia del documento con los scripts de la herramienta.


Como bonus también está la herramienta para pasar información entre diferentes listas de información.

martes, 23 de agosto de 2011

Gnu Octave: Alternativa gratuita a Matlab






El programa al que se hace mención es una excelente alternativa de MATLAB, puesto que permite trabajar con una sintaxis casi idéntica de tal forma que muchas rutinas pueden ser compatibles entre los dos programas y lo más importante es que se puede adquirir de forma totalmente gratuita. Quizá para quien inicie con este programa Gnu Octave permite un sin numero de operaciones para el manejo especializado de vectores, con lo cual se puede hacer el manejo de gran variedad de información. Es posible trabajar toda la matemática de vectores de una manera sencilla, manejo de operaciones con números complejos, derivadas, integrales, raíces de polinomios; también es importante anotar que se pueden mostrar gráficas de ecuaciones en dos y tres dimensiones mediante otro programa que acompaña a Gnu Octave; además existen otras funciones especiales para el manejo de imágenes, y sonido.
Se puede decir que el programa en cuestión no es solo un programa de matemáticas, si no que se vale de estas para desarrollar un propio lenguaje con el cual se pueden solucionar variedad de problemas a nivel profesional.
En el presente texto solo se darán a conocer algunas nociones básicas.


Entrar y salir
Cuando ya se tiene instalado Octave, aparecerá un icono en el escritorio, se accede a este programa como a cualquier otro (dando doble clic sobre su icono). Cuando se abre el programa aparece la ventana de comandos en la cual es donde se procederá a trabajar, su aspecto es un tanto sencillo, sin ninguna barra de herramientas, u opción donde se pueda seleccionar con el cursor; que esto no sea intimidante, pues el programa en si ofrece grandes posibilidades de trabajo. A continuación se presentan algunos datos de la versión seguidos del prompt (aviso) característico (octave:1>), este indica la línea donde puede empezar a digitar comandos o funciones. Para salir del programa puede digitar quit o exit.

Operaciones elementales.
Las operaciones como sumas, restas… Se realizan de manera normal, por ejemplo:

octave:2> 3+5
ans = 8
octave:3> 8/2
ans = 4
octave:4> 5*4
ans = 20
octave:5> 45-5
ans = 40
octave:6> 2^3
ans = 8

Como se observa en el ejemplo, estas operaciones no toman ninguna dificultad en comprenderlas, además de los operadores que se usan (+,-,/,*,^).

Crear variables.
Las variables son posiciones de memoria a las cuales se les pueden asignar diferentes valores, para crear una variable basta con asignarle una letra o un nombre que debe empezar por un carácter alfabético y definirle o asignarle un valor, esto se lo realiza mediante el signo “=”. Es IMPORTANTE tener en cuenta que se reconocen como diferentes las variables con nombres en mayúscula o en minúscula, esto también es valido para los comados.

Ejemplos:
octave:6> a=256
a = 256
octave:7> b=548;
octave:8> c=5+6
c = 11
En los ejemplos se pueden observar las diferentes formas para asignar valores a una variable, ya sea directamente el valor o mediante una operación. También es importante notar que si no se desea ver el valor asignado o el resultado del comando, se finaliza con “;”.

Crear Matrices.
Para crea matrices se puede hacerlo digitando los elementos, los de la misma fila están separados por espacios o comas, mientras que las filas están separadas por pulsaciones intro o por caracteres punto y coma (;). Por ejemplo, el siguiente comando define una matriz A de dimensión (3×3):

octave:9> A=[1 8 -2;2,6,8
> 7 5 -3]
A =

1 8 -2
2 6 8
7 5 -3
Se puede apreciar las diferentes formas de introducir los diferentes elementos de la matriz, que bien pudo haberse realizado de una sola manera espaciando sus elementos o colocando comas, y para las filas solo “;” o intro.

Si se desea crear un vector de números consecutivos se procede con el siguiente formato:
= ::
octave:10> B= 0:2:10
B =

0 2 4 6 8 10

octave:11> A= 0:2:11
A =

0 2 4 6 8 10

Aritmética de matrices.
Octave permite bastantes operaciones que facilitan el manejo de datos a nivel de matrices, por ello solo se explicarán las más básicas.

Un grupo de operaciones que se pueden realizar son las que respectan matrices con escalar.

octave:1> A= [1 2 -4; 1 -1 4; 5 -4 7];
octave:2> A+1
ans =

2 3 -3
2 0 5
6 -3 8

octave:3> B = A+1;
octave:4> B-1
ans =

1 2 -4
1 -1 4
5 -4 7

octave:5> 2*A
ans =

2 4 -8
2 -2 8
10 -8 14

También se pueden realizar las operaciones elemento por elemento de cada matriz, esto es posible mientras las matrices sean de iguales dimensiones.

octave:8> A.*B
ans =

2 6 12
2 -0 20
30 12 56

octave:9> A./B
ans =

0.50000 0.66667 1.33333
0.50000 -Inf 0.80000
0.83333 1.33333 0.87500

octave:10> A.+B
ans =

3 5 -7
3 -1 9
11 -7 15

octave:11> A.-B
ans =

-1 -1 -1
-1 -1 -1
-1 -1 -1

Como se observa, estas operaciones tiene en común que se antepone un punto a la operación normal que sería entre escalares.
Para las operaciones con matrices se tiene la multiplicación, división:
octave:15> B*A
ans =

-10 13 -17
27 -16 27
43 -17 20

octave:16> A/B
ans =

0.744444 -0.477778 0.077778
-0.255556 0.522222 0.077778
-0.255556 -0.477778 1.077778

octave:17> A\B
ans =

1.48387 0.48387 0.48387
1.03226 2.03226 1.03226
0.38710 0.38710 1.38710

Funciones Elementales y Trascendentes
Gnu Octave posee funciones predefinidas que se representan por su nombre y se aplican a uno o varios argumentos. La sintaxis es: función (argum-1, argum-2, … argum-n) Obviamente, se puede asignar el resultado a una variable:
Variable =función
Variable =expresión

• Básicas: abs, sqrt, round, fix, floor, ceil, sign, rem, mod, gcd,
lcm
• Trigonométricas: sin, cos, tan, cot, sec, csc, asin, acos, atan,
acot, asec, acsc
• Hiperbólicas: sinh, cosh, tanh, coth, sech, csch, asinh, acosh,
atanh, acoth, asech, acsch, log (natural)
• Trascendentes: log10 (base 10), log2 (base 2), exp (potencias
de e), pow2 (potencias de 2)
• De argumento complejo: angle, real, imag, conj
Se puede usar la ayuda que brinda el mismo programa, que indica las funciones de los diferentes comandos solamente digitando help seguido del comando o función buscada.

Constantes Predeterminadas
Se definen internamente:
  •  pi: π = 3, 14159...
  •  i, j: √−1 (imaginario)
  •  Inf: ∞ (infinito)
  •  NaN: Not a Number (0/0)
  •  clock: hora actual
  • date: fecha actual
  •  eps: diferencia mas pequeña entre dos valores
  •  ans: variable de salida por defecto
Formatos de salida
Representan las distintas formas de exhibición por pantalla de los resultados.
  •  short: es el formato estándar. Muestra la parte entera y 4 dígitos decimales.
  •  long: Parte entera y 14 dígitos decimales.
  •  bank: Parte entera y 2 dígitos decimales
  •  rat: Formato de fracciones. Exhibe los resultados de las operaciones en la forma a/b.
  •  hex: Formato hexadecimal (0-9, A-F).
Los formatos short y long presentan una opción en notación científica: short
e y long e. Para trabajar estos formatos se usa el comando format .

Números Complejos
Octave define las constantes i o j como la unidad imaginaria √−1. Si se expresa un número complejo en su forma binómica como z = (a + bi), su conjugado es zconj = (a − bi) (definido con el comando conj (z)). Otros comandos utilizados en la operatoria con complejos son:
  • real(x): calcula la parte real de un número complejo x
  • imag(x): calcula la parte imaginaria del número complejo x
  • abs(x): calcula el modulo de un número complejo
  • angle(x): calcula el valor del ángulo entre −π y π que representa el argumento de un número complejo. Se aplica atan2(imag(x)/real(x)).

Otros comandos y funciones.
  • rand (,), (): genera matrices con números al azar.
  • tic;<>; toc: contabiliza el tiempo que tarda en ejecutar las operaciones que están definidas entre las dos palabras clave.
  • who: muestra las variables que están disponibles.
  • whos: igual a who solo que además indica el tamaño usado por las variables.
  • clear: borra todas las variables, si se especifica también se puede borrar una variable en especial.
  • clc: lleva el prompt al inicio de la pantalla, también se usa igual el comando home.


Graficar funciones.

Para graficar funciones se lo realiza mediante el uso de vectores, en donde se define el dominio de la función con intervalo que se desee evaluar (“resolución de la funcion”), y se usa el comando plot(,).

octave:60> x=0:0.1:10;
octave:61> y= 3*x+3;
octave:62> plot(x,y)




En el ejemplo se grafica f(x) = y = 3X + 3; evaluado cada 0.1 unidades, de cero a 10.
Para un polinomio en “x” f(x) = X 2 + 2X

octave:63> y= x.^2+2*x+3;
octave:64> plot(x,y)

Se deben tener en cuenta como se operan los vectores, para elevar al cuadrado se debe optar por “.^” porque es un error elevar un vector al cuadrado. También es posible realizar gráficos con coordenadas polares con el comando polar(<ángulo>, ).

Ejemplo:
Rosa de tres pétalos:
octave:26> angulo=0:pi/60:2*pi;
octave:27> radio=10*sin(3*angulo);
octave:28> polar(angulo,radio)

Existen varias opciones que permiten modificar el gráfico, algunas son:
  •   title: Pone titulo al grafico, se usa title(’TITULO’)
  •   xlabel: Pone una etiqueta al eje x, xlabel(‘DISTANCIA’)
  •   ylabel: Pone una etiqueta al eje y, ylabel(‘ALTURA’)