Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Analizar datos de texto con matrices de cadenas

Este ejemplo muestra cómo almacenar texto de un archivo como una matriz de cadenas, ordenar las palabras por su frecuencia, trazar el resultado y recopilar estadísticas básicas para las palabras encontradas en el archivo.

Importar archivo de texto a matriz de cadenas

Lee el texto de los sonnets de Shakespeare con la función. Devuelve el texto como un vector de caracteres de 1 por 100266.filereadfileread

sonnets = fileread('sonnets.txt'); sonnets(1:35)
ans =      'THE SONNETS            by William Shakespeare'  

Convierta el texto en una cadena mediante la función.string A continuación, dividirlo en caracteres de nueva línea utilizando la función. se convierte en una matriz de cadenas de 2625 por 1, donde cada cadena contiene una línea de los poemas.splitlinessonnets Visualice las primeras cinco líneas de.sonnets

sonnets = string(sonnets); sonnets = splitlines(sonnets); sonnets(1:5)
ans = 5x1 string array
    "THE SONNETS"
    ""
    "by William Shakespeare"
    ""
    ""

Clean String array

Para calcular la frecuencia de las palabras, primero límpielo eliminando cadenas vacías y signos de puntuación.sonnets A continuación, remodele en una matriz de cadenas que contiene palabras individuales como elementos.

Quite las cadenas con cero caracteres () de la matriz de cadenas."" Compare cada elemento de a, la cadena vacía.sonnets"" A partir de R2017a, puede crear cadenas, incluida una cadena vacía, mediante comillas dobles. es un vector lógico que contiene un valor verdadero donde contiene una cadena con cero caracteres.TFsonnets Índice en con y eliminar todas las cadenas con cero caracteres.sonnetsTF

TF = (sonnets == ""); sonnets(TF) = []; sonnets(1:10)
ans = 10x1 string array
    "THE SONNETS"
    "by William Shakespeare"
    "  I"
    "  From fairest creatures we desire increase,"
    "  That thereby beauty's rose might never die,"
    "  But as the riper should by time decease,"
    "  His tender heir might bear his memory:"
    "  But thou, contracted to thine own bright eyes,"
    "  Feed'st thy light's flame with self-substantial fuel,"
    "  Making a famine where abundance lies,"

Reemplace algunos signos de puntuación por caracteres de espacio. Por ejemplo, reemplace los períodos, las comas y los puntos y coma. Mantenga apóstrofos porque pueden ser parte de algunas palabras en los sonnets, como.light's

p = [".","?","!",",",";",":"]; sonnets = replace(sonnets,p," "); sonnets(1:10)
ans = 10x1 string array
    "THE SONNETS"
    "by William Shakespeare"
    "  I"
    "  From fairest creatures we desire increase "
    "  That thereby beauty's rose might never die "
    "  But as the riper should by time decease "
    "  His tender heir might bear his memory "
    "  But thou  contracted to thine own bright eyes "
    "  Feed'st thy light's flame with self-substantial fuel "
    "  Making a famine where abundance lies "

Tira los caracteres de espacio iniciales y finales de cada elemento de.sonnets

sonnets = strip(sonnets); sonnets(1:10)
ans = 10x1 string array
    "THE SONNETS"
    "by William Shakespeare"
    "I"
    "From fairest creatures we desire increase"
    "That thereby beauty's rose might never die"
    "But as the riper should by time decease"
    "His tender heir might bear his memory"
    "But thou  contracted to thine own bright eyes"
    "Feed'st thy light's flame with self-substantial fuel"
    "Making a famine where abundance lies"

Dividir en una matriz de cadenas cuyos elementos son palabras individuales.sonnets Puede utilizar la función para dividir elementos de una matriz de cadenas en caracteres de espacio en blanco o en delimitadores que especifique.split Sin embargo, requiere que cada elemento de una matriz de cadenas debe ser divisible en un número igual de cadenas nuevas.split Los elementos de tener diferentes números de espacios, y por lo tanto no son divisibles en el mismo número de cadenas.sonnets Para usar la función activada, escriba un bucle for que llame en un elemento a la vez.splitsonnetssplit

Cree la matriz de cadenas vacía con la función.sonnetWordsstrings Escriba un bucle for que divida cada elemento del uso de la función.sonnetssplit Concatenar la salida de en.splitsonnetWords Cada elemento de es una palabra individual de.sonnetWordssonnets

sonnetWords = strings(0); for i = 1:length(sonnets)    sonnetWords = [sonnetWords ; split(sonnets(i))]; end sonnetWords(1:10)
ans = 10x1 string array
    "THE"
    "SONNETS"
    "by"
    "William"
    "Shakespeare"
    "I"
    "From"
    "fairest"
    "creatures"
    "we"

Ordenar palabras según la frecuencia

Encuentra las palabras únicas en.sonnetWords Cuéntelos y ordénalos según su frecuencia.

Para contar palabras que difieran solo por caso como la misma palabra, conviértalo a minúsculas.sonnetWords Por ejemplo, y cuente como la misma palabra.Thethe Encuentra las palabras únicas usando la función.unique A continuación, cuente el número de veces que se produce cada palabra única utilizando la función.histcounts

sonnetWords = lower(sonnetWords); [words,~,idx] = unique(sonnetWords); numOccurrences = histcounts(idx,numel(words));

Ordene las palabras por número de ocurrencias, de la mayoría a las menos comunes.sonnetWords

[rankOfOccurrences,rankIndex] = sort(numOccurrences,'descend'); wordsByFrequency = words(rankIndex);

Trazar frecuencia de palabras

Trace las apariciones de las palabras en los sonnets de las palabras más a menos comunes. La ley de Zipf establece que la distribución de las ocurrencias de palabras en un texto de cuerpo grande sigue una distribución de la ley de poder.

loglog(rankOfOccurrences); xlabel('Rank of word (most to least common)'); ylabel('Number of Occurrences');

Muestre las diez palabras más comunes en los sonnets.

wordsByFrequency(1:10)
ans = 10x1 string array
    "and"
    "the"
    "to"
    "my"
    "of"
    "i"
    "in"
    "that"
    "thy"
    "thou"

Recopilar estadísticas básicas en la tabla

Calcule el número total de ocurrencias de cada palabra en.sonnetWords Calcule el número de ocurrencias como un porcentaje del número total de palabras, y calcule el porcentaje acumulado de la mayoría al menos común. Escriba las palabras y las estadísticas básicas para ellos en una tabla.

numOccurrences = numOccurrences(rankIndex); numOccurrences = numOccurrences'; numWords = length(sonnetWords); T = table; T.Words = wordsByFrequency; T.NumOccurrences = numOccurrences; T.PercentOfText = numOccurrences / numWords * 100.0; T.CumulativePercentOfText = cumsum(numOccurrences) / numWords * 100.0;

Mostrar las estadísticas de las diez palabras más comunes.

T(1:10,:)
ans=10×4 table
    Words     NumOccurrences    PercentOfText    CumulativePercentOfText
    ______    ______________    _____________    _______________________

    "and"          490             2.7666                2.7666         
    "the"          436             2.4617                5.2284         
    "to"           409             2.3093                7.5377         
    "my"           371             2.0947                9.6324         
    "of"           370             2.0891                11.722         
    "i"            341             1.9254                13.647         
    "in"           321             1.8124                15.459         
    "that"         320             1.8068                17.266         
    "thy"          280             1.5809                18.847         
    "thou"         233             1.3156                20.163         

La palabra más común en los sonnets,,, ocurre 490 veces.and En conjunto, las diez palabras más comunes representan el 20,163% del texto.

Consulte también

| | | | | | | | | |

Temas relacionados