Alfabeto Matriz Transición

Referencia: Ross 2.2 p25, Telex, TTY o teletipo(Wikipedia)

Funciones de Matriz de transición de alfabeto

Es posible determinar la matriz de transición entre las letras del alfabeto continuando con el ejercicio de Funciones de probabilidad o masa.

Para procesar el texto se usa como entrada un archivo en formato .txt, analizando por línea, por símbolo y contando las veces que hay transición desde una letra del alfabeto.

Nota: Considere solo el total de letras, no el total de símbolos (no incluye «,;.!?» etc.)

El resultado que se obtiene es la matriz en los archivo adjuntos:

transicionesletras.txt

transicionesletrasfreq.txt

pueden ser importados para otro algoritmo, programa u hoja electrónica

matriz de conteo: 
[[   1 318 440 874   14  31  56  59    8  20  0 729 314  631 27   0   78   43  749  745  210  85  64  1  27 67 38]
 [ 134   0   0   0   86   0   0   0  153   8  0 184   0    2  0  56    0    0  167   67    3  40   0  0   0  1  0]
 [ 427   0  69   0  318   1   0 135 1064   0  2  63   0    0  0 877    0    0   82    0  174 394   0  0   0  0  0]
 [ 677   0   0   0 1872   0   8   1  513   1  0   1  20    0  0 689    0    2   36    0    4  71   5  0   0  0  0]
 [ 155  82 416 229   12  53 134   3   21  60 17 655 340 1921 12  34  112   18 1328 1479  138  27  61 24 139 37 40]
 [  45   0   0   0  111   0   0   0  194   0  0  18   0    0  0  48    0    0   25    0    0 160   0  0   0  0  0]
 [  90   0   0   0  104   0   1   0  108   0  1  22   2   30  0 114    0    0  105    2    1 146   0  0   0  0  0]
 [ 261   0   0   0   99   0   0   0   15   0  0   0   3    3  0 183    0    0    1    1    7  42   0  1   0  0  0]
 [ 499 165 439 546  473 123 155   3    0   6  0 143 371  778  4 326   60   12  281  326  285   2 162  0   1  0 37]
 [  29   0   0   0   48   0   0   0    6   0  0   0   0    0  0  46    0    0    0    0    0  29   0  0   0  0  0]
 [  19   0   0   0   12   0   0   0    0   0  0   0   0    0  0   1    0    0    0    0    0   0   0  0   0  0  0]
 [1299   0  19  20  513   3  53   0  281   0  1 172  46    2  0 560    5   28    4   27   97 152  12  0   0  3  0]
 [ 379  80   0   0  531   0   0   0  374   0  0   0   6    2  0 588  312    0   12    1    1  66   0  0   0  1  0]
 [ 501   2 447 379  361  63  86   0  385   6  1   0  33   13  0 541    1   16    2  214 1034 100  38  1   0  0 34]
 [  20   0   0   0    3   0   0   0    0   0  0   0   0    0  0  22    0    0    0    0    0   0   0  0   0  0  0]
 [   0 108 116 197   43  28  54   4   10  12  0 165 404  768  3   0  125    2  628 1356   97   6  18  0   5 11  5]
 [ 334   0  32   0  310   0   0   2  116   0  0 193   0    0  0 560    1    0  412    1   29 222   0  0   0  0  0]
 [   0   0   0   0    0   0   0   0    0   0  0   0   0    0  0   0    0    0    0    0    0 692   0  0   0  0  0]
 [1058  16  74 111  774  22  57   0  486   1  1  40  93   35  0 522   21   13  105  129  191  39  24  0   0  3 51]
 [ 306   2 118  31  576  40   0   2  694   0  2   2  92    0  0 333  150    5    0    4  731 374   2  1   0  0  0]
 [ 840   0   4   0  954   0   1   8  429   0  0   3   0    3  0 771    0    0  475    1    6 150   0  0   0  0  4]
 [ 232  50 100  54  976   9  25   1  134   5  0 166  82  758  0  12   69    0  115  166   83   0   9  0   0 38  9]
 [ 112   0   0   0  272   0   0   0  168   0  0   0   0    0  0  68    0    0    1    0    0  10   0  0   0  0  0]
 [   0   0   0   0    9   0   0   0    1   0  0   0   0    0  0   0    0    0    0    1   21   0   0  0   0  0  0]
 [  14   0  13   0    0   0   0   0   81   0  0   0   0    0  0   0   46    0    0    0   21   0   0  0   0  0  0]
 [  33   0   0   0   22   0   0   0    0   0  0   0   0    2  0  36    0    0    0    0    0   2   0  0   0  0  0]
 [ 117   0   7   0    0   0   3   0    0   0  0   0   0    0  0  22    0    0    0    0    2   3   0  0   0  0  0]]
matriz de conteo:
[[  1.77e-04  5.64e-02  7.81e-02  1.55e-01   2.48e-03  5.50e-03  9.94e-03  1.04e-02   1.42e-03  3.55e-03  0.00e+00  1.29e-01   5.57e-02  1.12e-01  4.79e-03  0.00e+00   1.38e-02  7.63e-03  1.33e-01  1.32e-01   3.73e-02  1.51e-02  1.13e-02  1.77e-04   4.79e-03  1.19e-02  6.75e-03]
 [  1.48e-01  0.00e+00  0.00e+00  0.00e+00   9.54e-02  0.00e+00  0.00e+00  0.00e+00   1.69e-01  8.87e-03  0.00e+00  2.04e-01   0.00e+00  2.21e-03  0.00e+00  6.21e-02   0.00e+00  0.00e+00  1.85e-01  7.43e-02   3.32e-03  4.43e-02  0.00e+00  0.00e+00   0.00e+00  1.10e-03  0.00e+00]
 [  1.18e-01  0.00e+00  1.91e-02  0.00e+00   8.81e-02  2.77e-04  0.00e+00  3.74e-02   2.95e-01  0.00e+00  5.54e-04  1.74e-02   0.00e+00  0.00e+00  0.00e+00  2.43e-01   0.00e+00  0.00e+00  2.27e-02  0.00e+00   4.82e-02  1.09e-01  0.00e+00  0.00e+00   0.00e+00  0.00e+00  0.00e+00]
 ...
 [  7.59e-01  0.00e+00  4.54e-02  0.00e+00   0.00e+00  0.00e+00  1.94e-02  0.00e+00   0.00e+00  0.00e+00  0.00e+00  0.00e+00   0.00e+00  0.00e+00  0.00e+00  1.42e-01   0.00e+00  0.00e+00  0.00e+00  0.00e+00   1.29e-02  1.94e-02  0.00e+00  0.00e+00   0.00e+00  0.00e+00  0.00e+00]]

Instrucciones en Python

# procesar un archivo de texto
# Determinar la matriz de transición
# para las letras del alfabeto(incluye ñ)
import numpy as np

# INGRESO
# archivo=input('archivo a leer.txt: ')
nombrearchivo =' eureka_poe_edgar_allan.txt'

# PROCEDIMIENTO
alfabeto = 'abcdefghijklmnñopqrstuvwxyz'
k = len(alfabeto)
matriz     = np.zeros(shape=(k,k),dtype=int)
transicion =
np.zeros(shape=(k,k),dtype=float)
total = 0

# procesa el archivo
archivo  = open(nombrearchivo,'r')
unalinea = archivo.readline()
while not(unalinea == ''):
    unalinea = unalinea.strip('\n')
    unalinea = unalinea.lower()
    m = len(unalinea)
    for j in range(0,m-1,1):
        unsimbolo = unalinea[j]
        donde = alfabeto.find(unsimbolo)
        siguiente = unalinea[j+1]
        dondesig  = alfabeto.find(siguiente)
        if (donde>=0 and dondesig>=0):
            #Si no encuentra es negativo
            matriz[donde][dondesig] = matriz[donde][dondesig]+1
            total = total + 1
    unalinea = archivo.readline()
archivo.close()

# Determina matriz de transicion
for i in range(0,k,1):
    suma = np.sum(matriz[i,:])
    transicion[i]=matriz[i,:]/suma

# Salida
print('matriz de conteo: ')
print(matriz)
print('matriz de transición:')
print(transicion)
np.savetxt('transicionletras.txt',matriz, fmt='%d')
np.savetxt('transicionletrasfreq.txt',transicion)