Eina gratuïta d'anàlisi de freqüència de caràcters. Visualitza instantàniament patrons de distribució de lletres. Perfecta per a criptografia, compressió de dades, detecció de codificació de text i anàlisi lingüística.
Us heu preguntat mai quines lletres dominen el vostre text? L'anàlisi de freqüència de caràcters compta quantes vegades apareix cada caràcter en un text, revelant patrons que no són evidents a primera vista. Aquesta tècnica es remunta a la criptografia del segle IX i segueix sent essencial avui en dia per trencar xifres, optimitzar algorismes de compressió i estudiar patrons lingüístics.
Heus aquí el que fa útil aquesta eina: enganxeu qualsevol text, ja sigui codi, missatges xifrats o documents senzills, i veureu immediatament un gràfic de barres que mostra exactament quins caràcters apareixen amb més freqüència. He trobat això especialment valuós quan es depuren problemes de codificació de text o s'analitzen patrons de xifrat en recerca de seguretat.
Les aplicacions del món real són sorprenentment àmplies. Quan es treballa en projectes de compressió de dades, conèixer la distribució de caràcters ajuda a triar l'algorisme adequat. En treballs de criptoanàlisi, patrons de freqüència inusuals poden revelar debilitats en xifres de substitució. Fins i tot per a edició de text bàsica, detectar freqüències de caràcters inesperades pot descobrir problemes de format ocults o problemes de codificació que es passarien per alt en una revisió manual.
El concepte central és simple: comptar cada caràcter i visualitzar els resultats. Però la implementació requereix una atenció acurada a l'eficiència, especialment quan es processen arxius de text grans.
Així és com l'anàlisi processa el vostre text:
La representació matemàtica de la freqüència de caràcters es pot expressar com:
On:
Un mapa hash (també anomenat diccionari o objecte) proporciona la manera més eficient de comptar ocurrències de caràcters:
11. Inicialitzar un mapa hash/diccionari buit
22. Per cada caràcter al text d'entrada:
3 a. Si el caràcter existeix al mapa hash, incrementar el seu recompte
4 b. Si no, afegir el caràcter al mapa hash amb un recompte d'1
53. Convertir el mapa hash a un array de parells caràcter-recompte
64. Ordenar l'array si cal (alfabèticament o per freqüència)
75. Generar visualització basada en l'array ordenat
8Aquest enfocament té una complexitat temporal O(n), on n equival a la longitud del text d'entrada. Què significa això a la pràctica: un document de 100.000 caràcters es processa tan ràpidament per caràcter com un fragment de 100 caràcters. Les cerques de temps constant del mapa hash fan això possible—cada verificació de caràcter triga el mateix temps independentment de quants caràcters únics ja s'hagin comptat.
Una limitació a tenir en compte: textos extremadament grans (milions de caràcters) podrien alentir-se en implementacions basades en navegador degut a les restriccions de memòria de JavaScript. Per a anàlisis de text a escala industrial, normalment s'utilitzaria processament de servidor amb llenguatges com Python o Go.
Començar és qüestió de segons. Simplement enganxa el teu text i observa com s'analitza automàticament.
L'eina accepta qualsevol cosa que li proporcionis:
No hi ha límit pràctic de longitud per a ús típic: enganxa un paràgraf o un capítol sencer.
Aquí hi ha quelcom útil: l'eina processa el teu text mentre l'escrius. Cap botó de "Calcular" per prémer, cap espera. Enganxa el teu text i el gràfic de barres s'actualitza instantàniament. Això facilita experimentar: prova diferents mostres de text i veu immediatament com canvia la distribució de caràcters.
La visualització mostra tres aspectes clau:
Què buscar: En text en anglès, normalment esperaries 'E', 'T', 'A', 'O' i 'I' prop del capdamunt. Si veus patrons inusuals, com 'Q' o 'Z' apareixent freqüentment, podria indicar substitucions de xifrat o problemes de codificació.
Necessites les dades per a un informe o presentació? Fes clic al botó "Copiar" per agafar els resultats amb format. Pots enganxar-ho directament a fulls de càlcul, documents o qualsevol altre lloc on estiguis treballant. Ho he trobat especialment útil per documentar descobriments de criptoanàlisi o incloure proves estadístiques en informes tècnics.
L'anàlisi de freqüència de caràcters apareix en camps sorprenentment diversos. Aquí és on s'utilitza realment:
Aquí és on l'anàlisi de freqüència va guanyar la seva reputació. Els xifrats de substitució simple —on cada lletra es mapeja a una altra lletra— preserven els patrons de freqüència del llenguatge original.
Exemple pràctic: Estàs analitzant un missatge xifrat i notes que un símbol apareix el 12,7% de les vegades. En anglès, 'E' apareix típicament al voltant del 12,7%, així que aquest símbol probablement representa 'E'. Creua la referència amb els símbols segon i tercer més comuns (probablement 'T' al ~9% i 'A' al ~8%), i ja tens la primera esquerda al xifrat.
El xifratge modern com AES-256 no té aquest punt feble —ho barreja tot tan a fons que l'anàlisi de freqüència no revela res. Però els xifrats de substitució encara apareixen en trencaclosques, competicions CTF i documents histórics.
Codificació de Huffman i algorismes de compressió similars depenen completament de la freqüència de caràcters. El concepte: assignar codis de bits curts a caràcters comuns i codis més llargs als rars.
Escenari real: Estàs comprimint un arxiu de registre on 'E' apareix el 15% de les vegades i 'Z' només el 0,07%. El teu algorisme de compressió assigna a 'E' un codi de 3 bits (000) i a 'Z' un codi d'11 bits. Multiplicar aquesta diferència a través de milers de caràcters permet aconseguir una reducció del 40-60% de la mida de l'arxiu sense perdre cap dada. Així és exactament com funcionen els arxius ZIP i GZIP per sota del capó.
La freqüència de caràcters funciona com una empremta digital dels estils d'escriptura. Cada autor tendeix a afavorir certes lletres i patrons de puntuació, fins i tot inconscientment.
Aplicació real: Els lingüistes forenses que van analitzar el cas del Unabomber van usar l'anàlisi de freqüència com una de les diverses tècniques per identificar els patrons d'escriptura de Theodore Kaczynski. Mentre que la tria de paraules importava més, els patrons a nivell de caràcters (com la densitat de comes i l'estructura de les frases) van contribuir al perfil lingüístic general.
Pots provar-ho tu mateix: analitza diversos paràgrafs de diferents autors en el mateix gènere. Notaràs diferències mesurables en la densitat de puntuació, la longitud mitjana de paraules (reflectida en patrons de caràcters) i la distribució de lletres.
Quan el text sembla corromput o mostra caràcters estranys, l'anàlisi de freqüència ajuda a diagnosticar el problema.
Escenari comú: Reps un arxiu que hauria de contenir text en anglès, però el gràfic de freqüència mostra ocurrències anormalment altes de caràcters com 'Ã' o '©'. Això suggereix immediatament que el text UTF-8 s'està interpretant com a ISO-8859-1 —un error freqüent en transferir arxius entre sistemes.
De manera similar, si esperes text en anglès però veus patrons de caràcters que no coincideixen (sense lletres comunes com 'E' o 'T'), podries estar mirant dades xifrades, dades binàries interpretades malament com a text, o un llenguatge completament diferent.
Els sistemes de PNL utilitzen la freqüència de caràcters com a identificador de llenguatge de primera passada. Diferents llenguatges tenen distribucions de caràcters dramàticament diverses.
Com funciona a la pràctica: L'anglès utilitza molt 'E', 'T', 'A'. L'espanyol mostra altes freqüències per 'E', 'A', 'O'. L'alemany té moltes 'E', 'N', a més de dièresis (ä, ö, ü) que no apareixen en anglès. Una simple comprovació de freqüència pot identificar el llenguatge abans d'aplicar models de PNL més sofisticats, estalviant recursos computacionals.
La freqüència de caràcters és un excel·lent primer projecte per a estudiants que aprenen a programar. Ensenya conceptes fonamentals sense una complexitat aclaparadora.
Per què funciona com a eina docent: Els estudiants practiquen mapes hash, bucles, algorismes d'ordenació i visualització de dades —tots conceptes de programació bàsics. Els resultats són immediatament visibles i verificables, la qual cosa facilita la depuració. Ho he vist usar amb èxit en cursos de CS101 com a primera implementació d'algorisme del món real.
L'anàlisi de freqüència de caràcters té els seus punts forts, però a vegades necessites un enfocament diferent. Aquí hi ha altres mètodes i quan té sentit cadascun:
Comptar paraules en lloc de caràcters revela patrons semàntics—el que el text tracta realment en lloc de només la seva composició de caràcters.
Millor per a: Anàlisi de contingut, recerca de paraules clau per SEO o identificació de temes. Si estàs analitzant articles de blog per trobar temes o extreure paraules clau per indexar, la freqüència de paraules et dona resultats significatius que l'anàlisi de caràcters no pot igualar.
Els n-grames examinen seqüències de caràcters o paraules—bigrames (parelles de dues lletres), trigrames (parelles de tres lletres), i així successivament. Això captura patrons contextuals.
Millor per a: Sistemes de text predictiu, funcions d'autocorrecció i modelatge de llenguatge. El teclat del teu telèfon utilitza l'anàlisi n-gram per predir quina paraula ve després. Sap que "el" sovint va seguit d'un nom, no basat en lletres individuals sinó en seqüències de paraules apreses.
Determina el to emocional (positiu, negatiu, neutral) mitjançant tècniques de PNL en lloc de comptar simplement.
Millor per a: Anàlisi de ressenyes de clients, monitoratge de xarxes socials o seguiment de la percepció de marca. Si necessites saber si la gent està contenta o molesta amb alguna cosa, l'anàlisi de sentiment et dona respostes que l'anàlisi de freqüència no pot proporcionar.
Mètriques com l'Índex de Facilitat de Lectura de Flesch-Kincaid o l'Índex SMOG mesuren la dificultat de comprendre un text, considerant la longitud de les frases i la complexitat de síl·labes.
Millor per a: Avaluació de contingut educatiu, avaluació de documentació tècnica o garantir l'accessibilitat. Abans de publicar contingut per a un públic general, les puntuacions de llegibilitat ajuden a identificar passatges massa complexos que podrien confondre els lectors.
Aquesta tècnica ha estat trencant codis durant més de mil anys. Aquí és com va evolucionar:
El polímata àrab Al-Kindi va documentar la primera descripció coneguda de l'anàlisi de freqüència al seu manuscrit "Un Manuscrit sobre el Desxiframent de Missatges Criptogràfics". Va adonar-se que certes lletres apareixien més sovint en text àrab, i aquest patró persistia fins i tot després de l'encriptació amb xifres de substitució simples. Aquesta intuïció va revolucionar la criptoanàlisi—de sobte, els missatges encriptats no eren tan segurs com tothom pensava.
Al segle XVI, els criptògrafs europeus coneixien l'anàlisi de freqüència i van dissenyar xifres específicament per derrotar-la. Giovanni Battista Bellaso i Blaise de Vigenère van desenvolupar xifres polialfabètiques que canviaven el patró de substitució al llarg del missatge, trencant els patrons de freqüència. Això va iniciar un intercanvi de segles entre creadors i trencadors de codis.
Els desxifradors britànics a Bletchley Park—incloent Alan Turing i el seu equip—van usar l'anàlisi de freqüència com un component per trencar la màquina Enigma alemanya. Mentre el procés complet era molt més complex, entendre els patrons de freqüència de caràcters i lletres va ajudar a identificar fragments de text coneguts que podien desbloquejar missatges sencers.
Quan van arribar els ordinadors, l'anàlisi de freqüència es va automatitzar i va trobar noves aplicacions. Els mateixos principis matemàtics que trenquen codis també optimitzen algoritmes de compressió (codificació de Huffman, LZ77), identifiquen idiomes en sistemes de PLN i analitzen grans conjunts de dades de text. El que va començar com una tècnica de criptografia es va convertir en una eina fonamental en teoria de la informació i ciència de la computació.
Aquí hi ha implementacions d'anàlisi de freqüència de caràcters en diversos llenguatges de programació:
1def analyze_character_frequency(text):
2 # Inicialitzar un diccionari buit
3 frequency = {}
4
5 # Comptar cada caràcter
6 for char in text:
7 if char in frequency:
8 frequency[char] += 1
9 else:
10 frequency[char] = 1
11
12 # Convertir a llista de tuples i ordenar alfabèticament
13 result = sorted(frequency.items())
14
15 return result
16
17# Exemple d'ús
18text = "Hello, World!"
19frequencies = analyze_character_frequency(text)
20for char, count in frequencies:
21 print(f"'{char}': {count}")
221function analyzeCharacterFrequency(text) {
2 // Inicialitzar un objecte buit
3 const frequency = {};
4
5 // Comptar cada caràcter
6 for (let i = 0; i < text.length; i++) {
7 const char = text[i];
8 if (frequency[char]) {
9 frequency[char]++;
10 } else {
11 frequency[char] = 1;
12 }
13 }
14
15 // Convertir a array d'objectes i ordenar alfabèticament
16 const result = Object.entries(frequency)
17 .map(([char, count]) => ({ char, count }))
18 .sort((a, b) => a.char.localeCompare(b.char));
19
20 return result;
21}
22
23// Exemple d'ús
24const text = "Hello, World!";
25const frequencies = analyzeCharacterFrequency(text);
26frequencies.forEach(item => {
27 console.log(`'${item.char}': ${item.count}`);
28});
291import java.util.*;
2
3public class CharacterFrequencyAnalyzer {
4 public static List<Map.Entry<Character, Integer>> analyzeCharacterFrequency(String text) {
5 // Inicialitzar un HashMap
6 Map<Character, Integer> frequency = new HashMap<>();
7
8 // Comptar cada caràcter
9 for (int i = 0; i < text.length(); i++) {
10 char c = text.charAt(i);
11 frequency.put(c, frequency.getOrDefault(c, 0) + 1);
12 }
13
14 // Convertir a llista i ordenar alfabèticament
15 List<Map.Entry<Character, Integer>> result = new ArrayList<>(frequency.entrySet());
16 result.sort(Map.Entry.comparingByKey());
17
18 return result;
19 }
20
21 public static void main(String[] args) {
22 String text = "Hello, World!";
23 List<Map.Entry<Character, Integer>> frequencies = analyzeCharacterFrequency(text);
24
25 for (Map.Entry<Character, Integer> entry : frequencies) {
26 System.out.println("'" + entry.getKey() + "': " + entry.getValue());
27 }
28 }
29}
301#include <iostream>
2#include <string>
3#include <map>
4#include <vector>
5#include <algorithm>
6
7std::vector<std::pair<char, int>> analyzeCharacterFrequency(const std::string& text) {
8 // Inicialitzar un mapa
9 std::map<char, int> frequency;
10
11 // Comptar cada caràcter
12 for (char c : text) {
13 frequency[c]++;
14 }
15
16 // Convertir a vector de parells
17 std::vector<std::pair<char, int>> result(frequency.begin(), frequency.end());
18
19 // El mapa ja està ordenat per clau (caràcter)
20 return result;
21}
22
23int main() {
24 std::string text = "Hello, World!";
25 auto frequencies = analyzeCharacterFrequency(text);
26
27 for (const auto& pair : frequencies) {
28 std::cout << "'" << pair.first << "': " << pair.second << std::endl;
29 }
30
31 return 0;
32}
331def analyze_character_frequency(text)
2 # Inicialitzar un hash buit
3 frequency = Hash.new(0)
4
5 # Comptar cada caràcter
6 text.each_char do |char|
7 frequency[char] += 1
8 end
9
10 # Convertir a array d'arrays i ordenar alfabèticament
11 result = frequency.to_a.sort_by { |char, _| char }
12
13 return result
14end
15
16# Exemple d'ús
17text = "Hello, World!"
18frequencies = analyze_character_frequency(text)
19frequencies.each do |char, count|
20 puts "'#{char}': #{count}"
21end
22L'anàlisi de freqüència de caràcters compta quantes vegades apareix cada caràcter en un text. Els principals usos: trencar xifrats de substitució, optimitzar algorismes de compressió de dades (com arxius ZIP), detectar errors de codificació de text, identificar idiomes en sistemes de PNL i analitzar patrons d'escriptura. És una tècnica fonamental que s'ha fet servir durant més de 1.000 anys en criptografia.
Per a patrons lingüístics típics, necessiteu almenys uns pocs centenars de caràcters, aproximadament 2-3 paràgrafs. Les frases curtes no coincidiran amb les distribucions de freqüència esperades perquè hi ha massa variació aleatòria. Un cop arribeu a 1.000+ caràcters, els patrons s'estabilitzen i reflecteixen l'estil real de l'idioma o autor. Per a treballs de criptoanàlisi, més text sempre ajuda: trencar un xifrat amb un text xifrat de 20 caràcters és gairebé impossible, però una mostra de 500 caràcters us dona patrons sòlids per treballar.
No. L'anàlisi de freqüència de caràcters només funciona en xifrats de substitució simples on cada lletra es mapeja de manera consistent a una altra lletra o símbol. El xifratge modern (AES-256, RSA, TLS/HTTPS) utilitza transformacions matemàtiques tan complexes que la sortida xifrada sembla completament aleatòria, sense que sobrevisquin patrons de freqüència. Si l'anàlisi de freqüència pogués trencar HTTPS, la banca en línia no existiria.
L'estructura del llenguatge determina la freqüència de caràcters. L'anglès utilitza molt paraules curtes com "the", "and", "for", la qual cosa augmenta les freqüències de 'E' i 'T'. L'espanyol té paraules més plenes de vocals, de manera que 'A', 'E', 'O' dominen. L'alemany utilitza paraules compostes i dièresis (ä, ö, ü) que no existeixen en anglès. Aquests patrons són tan consistents que podeu identificar l'idioma només amb la distribució de freqüència de caràcters, sense necessitat de traducció.
Useu freqüència de caràcters quan: analitzeu text xifrat, optimitzeu compressió, detecteu errors de codificació o treballeu amb qualsevol idioma (és universal). Useu freqüència de paraules quan: necessiteu significat semàntic: extracció de paraules clau, anàlisi de contingut, optimització SEO o comprendre de què tracta un text. L'anàlisi de caràcters és de nivell més baix i independent de l'idioma; l'anàlisi de paraules és de nivell superior i centrat en el significat.
Algorismes com Huffman coding assignen codis binaris curts als caràcters freqüents i codis llargs als rars. Exemple: En text anglès, 'E' podria tenir un codi de 3 bits (000), mentre que 'Z' en té 11. Com que 'E' apareix el 12,7% de les vegades i 'Z' només el 0,07%, s'estalvia una quantitat massiva d'espai. Aquest és el principi bàsic darrere de ZIP, GZIP i altres formats de compressió sense pèrdua. L'algorisme construeix primer una taula de freqüència i després codifica basant-se en aquestes estadístiques.
Depèn del vostre objectiu. Per a criptoanàlisi, mantingueu-les separades: 'E' i 'e' podrien desxifrar-se a lletres diferents. Per a anàlisi lingüística o optimització de compressió, sovint convertireu tot a minúscules per centrar-vos en patrons de lletres més que en l'estil de capitalització. Aquesta eina els compta com a caràcters distints, donant-vos les dades brutes perquè decidiu com interpretar-les.
No per si sola, però contribueix a l'anàlisi estilomètrica. Cada autor té patrons subtils: densitat de puntuació, longitud mitjana de paraules (reflectida en la distribució de caràcters) i peculiaritats d'ús de lletres. Combinada amb la tria de paraules, l'estructura de frases i altres marcadors, la freqüència de caràcters es converteix en un punt de dades en una empremta més àmplia d'autoria. Els lingüistes forenses l'usen per a casos d'atribució, però cap mètric únic és suficient sol.
Es compten tots els caràcters, incloent-hi espais, tabuladors, salts de línia, puntuació i símbols especials. Els espais sovint són el "caràcter" més freqüent en text normal. Aquest recompte complet us dona la imatge completa de la composició del text: útil per detectar format ocult, analitzar codi (on importin claudàtors i punts i comes) o entendre l'estructura completa de missatges xifrats.
L'eina gestiona documents típics sense problemes: 50.000-100.000 caràcters haurien de funcionar bé en qualsevol navegador modern. Més enllà d'això, podríeu veure alentiment mentre JavaScript processa les dades. Per analitzar llibres sencers o conjunts de dades massius (milions de caràcters), necessitaríeu una implementació del costat del servidor en Python, Go o un altre llenguatge dissenyat per al processament pesat de dades. Per a ús quotidià, però, l'eina basada en navegador gestiona tot el que necessitareu.
MDN Web Docs: Map (Implementació de Hash Map en JavaScript) - Documentació oficial de Mozilla Developer Network sobre estructures de dades de hash map utilitzades en l'anàlisi de freqüència.
Shannon, C. E. (1951). "Predicció i entropia de l'anglès imprès." The Bell System Technical Journal, 30(1), 50-64. - Article fonamental sobre teoria de la informació i freqüències de caràcters.
Huffman, D. A. (1952). "Un mètode per a la construcció de codis de mínima redundància." Proceedings of the IRE, 40(9), 1098-1101. - Article original que descriu la codificació Huffman, que es basa en la freqüència de caràcters.
Estàndard d'Encodificació de Caràcters Unicode - Documentació oficial del Consorci Unicode per entendre els conjunts de caràcters i la seva codificació.
Stallings, W. (2017). Criptografia i Seguretat de Xarxes: Principis i Pràctica (7a ed.). Pearson. - Manual complet que cobreix tècniques de criptoanàlisi incloent l'anàlisi de freqüència.
Codificació Huffman - Viquipèdia - Explicació detallada dels algoritmes de compressió que depenen de la freqüència de caràcters.
Juola, P. (2006). "Atribució d'Autoria." Foundations and Trends in Information Retrieval, 1(3), 233-334. - Recerca acadèmica sobre l'ús de patrons de caràcters per a la identificació d'autoria.
Estàs preparat per veure quins patrons s'amaguen al teu text? Enganxa qualsevol contingut a l'eina anterior: missatges xifrats, mostres de codi, mostres d'escriptura o documents en qualsevol idioma. La visualització apareix instantàniament, mostrant-te exactament quins caràcters dominen el teu text. Tant si estàs depurant problemes de codificació, analitzant xifres o simplement tens curiositat per la distribució de caràcters, obtindràs informació immediata i útil.
Descobreix més eines que podrien ser útils per al teu flux de treball