Ya puse una entrada con un script en python para calcular la Entropía (H) de un texto, y en ésta pongo el código Visual Basic para aplicaciones (VBA) para automatizar en Excel esa misma tarea.
Antes de poner el código y un ejemplo de su funcionamiento, recordar qué es y cómo se calcula.
la Entropía (H) mide la incertidumbre de una fuente de información y puede ser considerada como la cantidad de información promedio que contienen los símbolos usados.
Donde:
H: Entropía.
M: mensaje o texto.
mi: carácter i-ésimo del mensaje o texto.
p(mi): probabilidad de aparición del carácter i-ésimo en el mensaje o texto.
n: número de caracteres o tamaño del mensaje o texto.
El código es el siguiente:
' ENTROPÍA (H): ' ' Cálculo de la Entropía (H) de un texto. ' ' http://mikelgarcialarragan.blogspot.com/ Option Explicit Public TEXTO As Range Public H As Range Public Sub Calcular_H() Dim Alfabeto As String Dim Caracter As Integer Dim FrecuenciasRelativas As New Collection, FrecuenciaRelativa As Variant Dim H As Double Alfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" Range("TEXTO").Value = A_Z(UCase(Replace(Range("TEXTO").Value, " ", ""))) If Len(Range("TEXTO").Value) = 0 Then MsgBox "Introduzca el texto del que se desea calcular la Entropía (H). Sólo caracteres alfabéticos [A-Z], 'Ñ' excluida.", vbOKOnly + vbCritical, "¡Error!" Else For Caracter = 1 To Len(Alfabeto) If Len(Range("TEXTO").Value) - Len(Replace(Range("TEXTO").Value, Mid(Alfabeto, Caracter, 1), "")) <> 0 Then FrecuenciasRelativas.Add Len(Range("TEXTO").Value) - Len(Replace(Range("TEXTO").Value, Mid(Alfabeto, Caracter, 1), "")) Else FrecuenciasRelativas.Add 0 End If Next H = 0 For Each FrecuenciaRelativa In FrecuenciasRelativas If FrecuenciaRelativa <> 0 Then H = H + FrecuenciaRelativa / Len(Range("TEXTO").Value) * Log(Len(Range("TEXTO").Value) / FrecuenciaRelativa) / Log(2) End If Next Range("H").Value = H End If End Sub Function A_Z(Cadena As String) As String Dim Caracter As Integer For Caracter = 1 To Len(Cadena) Select Case Asc(Mid(Cadena, Caracter, 1)) Case 65 To 90: A_Z = A_Z & Mid(Cadena, Caracter, 1) End Select Next End Function
Ejemplo de funcionamiento:
Quizás también te interese:
Comentarios
Publicar un comentario