Tasuta tärkide sageduse analüüsi tööriist. Visualiseerige tähtede jaotuse mustreid koheselt. Ideaalne krüptograafia, andmete tihendamise, teksti kodeeringu tuvastamise ja keelelise analüüsi jaoks.
Kas olete kunagi mõelnud, millised tähed teie kirjutises domineerivad? Märkide sagedusanalüüs loendab, kui sageli iga märk tekstis esineb, paljastades mustrid, mis esimesel pilgul pole nähtavad. See tehnika ulatub tagasi 9. sajandi krüptograafiasse ja on tänapäeval endiselt oluline šifrite murdmisel, kompressimisalgoritmide optimeerimisel ja keeleliste mustrite uurimisel.
Siin on põhjus, miks see tööriist kasulik on: kleepige mis tahes tekst - olgu see siis kood, krüpteeritud sõnumid või lihtsad dokumendid - ja te näete kohe tulpdiagrammi, mis näitab täpselt, millised märgid kõige sagedamini esinevad. Olen leidnud selle eriti väärtuslikuks teksti kodeerimisprobleemide silumisel või turvauuringutes šifri mustrite analüüsimisel.
Reaalsed rakendused on üllatavalt laiaulatuslikud. Andmekompressiooni projektidega töötades aitab märkide jaotuse tundmine valida õiget algoritmi. Krüptoanalüüsi töös võivad ebatavalised sagedusmustreid paljastada asendusšifri nõrkused. Isegi lihtsaks teksti redigeerimiseks võib ootamatute märkide sageduste märkamine paljastada peidetud vormindamisprobleeme või kodeerimisvigu, mida käsitsi ülevaatamisel märkamata jätaksite.
Põhimõte on lihtne: loendada iga märki ja visualiseerida tulemused. Kuid rakendamine nõuab tähelepanelikku tähelepanu efektiivsusele, eriti suurte tekstifailide töötlemisel.
Siin on, kuidas analüüs teie teksti töötleb:
Märkide sageduse matemaatiline esitus võib olla väljendatud järgmiselt:
Kus:
Räsitabel (mida nimetatakse ka sõnastikuks või objektiks) pakub kõige tõhusamat viisi märkide esinemiste loendamiseks:
11. Lähtesta tühi räsitabel/sõnastik
22. Iga märgi jaoks sisendtekstis:
3 a. Kui märk on räsitabelis olemas, suurenda selle arvu
4 b. Kui ei ole, lisa märk räsitabelisse arvuga 1
53. Teisenda räsitabel märkide-arvude paaride massiiviks
64. Sorteeri massiiv vastavalt vajadusele (tähestiku või sageduse järgi)
75. Loo visualiseering sorteeritud massiivi põhjal
8Sellel lähenemisel on O(n) ajakeerukus, kus n võrdub sisendteksti pikkusega. Mida see praktikas tähendab: 100 000 märgiga dokument töötleb märke sama kiiresti kui 100 märgiga näidis. Räsitabeli konstantse aja otsingud muudavad selle võimalikuks - iga märgi kontroll võtab sama palju aega, sõltumata sellest, mitu unikaalset märki te juba loendanud olete.
Üks piirang, mida tuleb märkida: äärmiselt suured tekstid (miljonid märgid) võivad aeglustuda brauseripõhistes rakendustes JavaScripti mälupiirangute tõttu. Tööstuslikul tasemel teksti analüüsiks kasutataks tavaliselt serveripoolset töötlust keeltes nagu Python või Go.
Alustamine võtab vaid sekundeid. Lihtsalt kleepige oma tekst ja jälgige analüüsi automaatset toimumist.
Tööriist aktsepteerib kõike, mida talle annate:
Praktikas pole pikkuse piirangut—kleepige kas lõik või terve peatükk.
Siin on midagi kasulikku: tööriist töötleb teie teksti kohe sisestamise ajal. Pole vaja mingit "Arvuta" nuppu vajutada, pole vaja oodata. Kleepige tekst ja tulpdiagramm uueneb koheselt. See muudab eksperimenteerimise lihtsaks—proovige erinevaid tekstinäidiseid ja nähke kohe, kuidas märkide jaotus muutub.
Visualiseering näitab kolme olulist asja:
Mida otsida: Inglise keelses tekstis võiksite eeldada, et 'E', 'T', 'A', 'O' ja 'I' on ülal pool. Kui näete ebatavalisi mustreid—nagu 'Q' või 'Z' sage esinemine—võib see viidata šifri asendamisele või kodeerimisprobleemidele.
Vajate andmeid aruandeks või esitluseks? Klõpsake "Kopeeri" nuppu, et haarata vormindatud tulemused. Saate selle otse kleepida tabelitesse, dokumentidesse või mis tahes kohta, kus töötate. Olen leidnud selle eriti kasulikuna krüptoanalüüsi tulemuste dokumenteerimisel või statistiliste tõendite lisamisel tehnilistesse ülevaadetesse.
Tähtede sagedusanalüüs ilmneb üllatavalt mitmekesistes valdkondades. Siin on kohad, kus seda tegelikult kasutatakse:
Siin teenis sagedusanalüüs oma maine. Lihtsad asenduskifrid – kus iga täht vastendub teise tähega – säilitavad algkeele sagedusmustreid.
Praktiline näide: Te analüüsite krüpteeritud sõnumit ja märkate, et üks sümbol esineb 12,7% ajast. Inglise keeles esineb 'E' tavaliselt umbes 12,7%, seega see sümbol tõenäoliselt tähistab 'E'-d. Ristviidake teise ja kolmanda kõige sagedasema sümboliga (tõenäoliselt 'T' umbes 9% ja 'A' umbes 8%), ja teil on esimene praoks kifris.
Kaasaegne krüpteerimine nagu AES-256 ei oma seda nõrkust – see segab kõike nii põhjalikult, et sagedusanalüüs ei avalda midagi. Kuid asenduskifrid esinevad endiselt mõistatustes, CTF-võistlustel ja ajaloolistes dokumentides.
Huffmani kodeerimine ja sarnased kompressimisalgoritmid sõltuvad täielikult tähtede sagedusest. Kontseptsioon: määrata lühikesed bitikoodid sagedastele tähtedele ja pikemad koodid haruldastele.
Reaalne stsenaarium: Te kompresseerite logifaili, kus 'E' esineb 15% ajast ja 'Z' ainult 0,07%. Teie kompressimisalgoritm määrab 'E'-le 3-bitise koodi (000) ja 'Z'-le 11-bitise koodi. Korrutage see erinevus tuhandete tähtede ulatuses, ja te saavutate 40-60% faili suuruse vähendamise ilma andmeid kaotamata. Nii toimivad ZIP-failid ja GZIP täpselt.
Tähtede sagedus toimib kirjutamisstiili sõrmejäljena. Iga autor kaldub eelistama teatud tähti ja kirjavahemärkide mustreid, isegi teadvustamata.
Reaalne rakendus: Forensilised lingvistid, kes analüüsisid Unabomberi juhtumit, kasutasid sagedusanalüüsi ühe paljudest tehnikatest Theodore Kaczynski kirjutamismustrite tuvastamiseks. Kuigi sõnavalik oli olulisem, aitasid tähetaseme mustrid (nagu koma sagedus ja lausestruktuur) kaasa üldisele lingvistilisele profiilile.
Te võite seda ise proovida: analüüsige mitme autori lõike samas žanris. Te märkate mõõdetavaid erinevusi kirjavahemärkide tiheduses, keskmises sõna pikkuses (kajastudes tähemustreis) ja tähtede jaotuses.
Kui tekst näeb rikutud välja või kuvab imelikke tähemärke, aitab sagedusanalüüs probleemi diagnoosida.
Tavaline stsenaarium: Te saate faili, mis peaks sisaldama ingliskeelset teksti, kuid sagedusgraafik näitab ebanormaalselt kõrgeid esinemisi tähtedel nagu 'Ã' või '©'. See kohe viitab, et UTF-8 teksti tõlgendatakse ISO-8859-1 kodeeringuna – sage viga failide ülekandmisel süsteemide vahel.
Samuti, kui te ootate ingliskeelset teksti, kuid näete tähemustreid, mis ei vasta (puuduvad tavalised tähed nagu 'E' või 'T'), võite vaadata krüpteeritud andmeid, valesti tõlgendatud binaarseid andmeid või hoopis teist keelt.
NLP-süsteemid kasutavad tähtede sagedust kiire esmase keeletuvastajana. Erinevatel keeltel on märgatavalt erinevad tähejaotused.
Kuidas see praktikas toimib: Inglise keeles kasutatakse palju 'E', 'T', 'A'. Hispaania keeles on kõrged sagedused 'E', 'A', 'O' puhul. Saksa keeles on palju 'E', 'N', pluss täpitähed (ä, ö, ü), mida inglise keeles üldse ei esine. Lihtne sageduskontroll võib tuvastada keele enne keerulisemate NLP-mudelite rakendamist, säästes arvutusressursse.
Tähtede sagedus on suurepärane esimene projekt tudengitele, kes õpivad programmeerima. See õpetab põhilisi mõisteid ilma liigselt keeruka komplekssuseta.
Miks see töötab õppevahendina: Tudengid harjutavad räsitabeleid, tsükleid, sortimisalgoritme ja andmete visualiseerimist – kõik põhilised programmeerimise kontseptsioonid. Tulemused on kohe nähtavad ja kontrollitavad, muutes veaparanduse lihtsamaks. Olen näinud seda edukalt kasutatuna CS101 kursustel esimese reaalse algoritmi rakendusena.
Tähekomponentide sageduse analüüsil on oma tugevused, kuid mõnikord vajate teistsugust lähenemist. Siin on, mis veel olemas on ja millal miski mõtet omab:
Sõnade loendamine tähtede asemel paljastab semantilised mustrid — mida tekst tegelikult tähendab, mitte ainult selle tähekompositsiooni.
Sobib paremini: Sisu analüüsiks, SEO märksõnade uurimiseks või teema tuvastamiseks. Kui analüüsite blogisid teemade leidmiseks või märksõnade ekstraheerimiseks indekseerimiseks, annab sõnade sageduse analüüs tähendusrikkamaid tulemusi kui tähekomponentide analüüs.
N-grammid uurivad tähtede või sõnade järjendeid — bigrammid (kahetähelised paarid), trigrammid (kolmetähelised paarid) ja edasi. See püüab kontekstuaalsed mustrid.
Sobib paremini: Ennustava teksti süsteemidele, automaatparanduse funktsioonidele ja keele modelleerimisel. Teie telefoni klaviatuur kasutab n-grammi analüüsi järgmise sõna ennustamiseks. See teab, et "the" järel tuleb sageli nimisõna, mitte üksikute tähtede, vaid õpitud sõnajärjestuste põhjal.
See määratleb emotsionaalse tooni (positiivne, negatiivne, neutraalne) NLP tehnikate abil, mitte lihtsalt loendamise kaudu.
Sobib paremini: Kliendi arvustuste analüüsiks, sotsiaalmeedia jälgimiseks või brändi tajumise hindamiseks. Kui soovite teada, kas inimesed on millestki õnnelikud või pahandanud, annab meeleolu analüüs vastused, mida sageduse analüüs ei suuda pakkuda.
Meetrikad nagu Flesch-Kincaid lugemise lihtsus või SMOG indeks mõõdavad, kui raske teksti mõista, arvestades lausete pikkust ja silpide keerukust.
Sobib paremini: Hariduslike materjalide hindamiseks, tehnilise dokumentatsiooni hindamiseks või ligipääsetavuse tagamiseks. Enne sisu avaldamist üldisele publikule aitavad loetavuse skoorid tuvastada liiga keerulisi lõike, mis võivad lugejaid segadusse viia.
See tehnika on murdnud koode üle tuhande aasta. Siin on selle areng:
Araabia polümaatt Al-Kindi dokumenteeris esimese teadaoleva kirjelduse tähtede sagedusanalüüsist oma käsikirjas "Käsikiri krüptograafiliste sõnumite dekodeerimisest". Ta taipas, et teatavad tähed esinevad araabia tekstis sagedamini, ja see muster püsib ka lihtsa asenduskrüptiga krüpteerimisel. See arusaamine revolutsioneeris krüptoanalüüsi - äkki polnud krüpteeritud sõnumid enam nii turvalised kui varem arvati.
Bletchley Pargi britid - sealhulgas Alan Turing ja tema meeskond - kasutasid tähtede sagedusanalüüsi ühe komponendina Saksa Enigma masina murdmisel. Kuigi kogu protsess oli palju keerulisem, aitas tähtede ja tähekombinatsioonide sageduse mõistmine tuvastada teadaolevaid tekstilõike, mis võimaldasid terved sõnumid lahti muukida.
Arvutite saabudes muutus tähtede sagedusanalüüs automatiseerituks ja leidis uusi rakendusi. Samad matemaatilised põhimõtted, mis murdvad koode, optimeerivad ka kompressioonialgoritme (Huffman kodeerimine, LZ77), tuvastada keeli NLP süsteemides ja analüüsida tohutuid tekstiandmestikke. See, mis algas krüptograafia tehnikana, sai infoteooria ja arvutiteaduse põhiliseks tööriistaks.
Siin on iseloomutähtede sagedusanalüüsi rakendused erinevates programmeerimiskeeltes:
1def analyze_character_frequency(text):
2 # Lähtesta tühi sõnastik
3 frequency = {}
4
5 # Loe iga täht
6 for char in text:
7 if char in frequency:
8 frequency[char] += 1
9 else:
10 frequency[char] = 1
11
12 # Teisenda tulemused tuplede loeteluks ja sorteeri tähestiku järgi
13 result = sorted(frequency.items())
14
15 return result
16
17# Näidiskasutus
18text = "Hello, World!"
19frequencies = analyze_character_frequency(text)
20for char, count in frequencies:
21 print(f"'{char}': {count}")
221function analyzeCharacterFrequency(text) {
2 // Lähtesta tühi objekt
3 const frequency = {};
4
5 // Loe iga täht
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 // Teisenda objektide massiiviks ja sorteeri tähestiku järgi
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// Näidiskasutus
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 // Lähtesta HashMap
6 Map<Character, Integer> frequency = new HashMap<>();
7
8 // Loe iga täht
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 // Teisenda loeteluks ja sorteeri tähestiku järgi
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 // Lähtesta kaart
9 std::map<char, int> frequency;
10
11 // Loe iga täht
12 for (char c : text) {
13 frequency[c]++;
14 }
15
16 // Teisenda vektoriks
17 std::vector<std::pair<char, int>> result(frequency.begin(), frequency.end());
18
19 // Kaart on juba võtme (tähe) järgi sorteeritud
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 # Lähtesta tühi hash
3 frequency = Hash.new(0)
4
5 # Loe iga täht
6 text.each_char do |char|
7 frequency[char] += 1
8 end
9
10 # Teisenda massiiviks ja sorteeri tähestiku järgi
11 result = frequency.to_a.sort_by { |char, _| char }
12
13 return result
14end
15
16# Näidiskasutus
17text = "Hello, World!"
18frequencies = analyze_character_frequency(text)
19frequencies.each do |char, count|
20 puts "'#{char}': #{count}"
21end
22Tähekomponentide sagedusanalüüs loendab, kui tihti iga täht tekstis esineb. Peamised kasutusalad: lihtsubstitutsioonišifrite murdmine, andmekompressioonialgoritimide optimeerimine (nagu ZIP-failid), teksti kodeeringu vigade tuvastamine, keelte tuvastamine NLP süsteemides ja kirjutamismustrite analüüsimine. See on põhitehnika, mida on krüptograafias kasutatud üle 1000 aasta.
Tüüpiliste keelemudelite jaoks vajate vähemalt mõnesaja tähemärki - umbes 2-3 lõiku. Lühikesed laused ei vasta eeldatavale sagedusjaotusele liiga suure juhuslike variatsioonide tõttu. Kui jõuate 1000+ tähemärgini, muutuvad mustrid stabiilsemaks ja kajastavad tegelikku keelt või autori stiili. Krüptoanalüüsi töös aitab rohkem teksti alati - 20-tähemärgilise šifritekstiga on murdmine peaaegu võimatu, kuid 500-tähemärgiline näidis annab kindlad mustrid.
Ei. Tähekomponentide sagedusanalüüs toimib ainult lihtsatel substitutsioonišifritel, kus iga täht järjekindlalt teise tähega või sümboliga seostub. Kaasaegne krüpteerimine (AES-256, RSA, TLS/HTTPS) kasutab nii keerulisi matemaatilisi teisendusi, et krüpteeritud väljund näeb täiesti juhuslik välja - mingid sagedusmudelid ei säili. Kui sagedusanalüüs suudaks HTTPS-i murda, ei eksisteeriks internetipangandust.
Keele struktuur määrab tähekomponentide sageduse. Inglise keeles kasutatakse lühikesi sõnu nagu "the", "and", "for" palju, tõstes 'E' ja 'T' sagedust. Hispaania keeles on rohkem vokaalirikaseid sõnu, mistõttu domineerivad 'A', 'E', 'O'. Saksa keeles kasutatakse liitsõnu ja täpitähti (ä, ö, ü), mida inglise keeles ei esine. Need mudelid on nii püsivad, et keele saab tuvastada juba tähekomponentide sagedusjaotuse põhjal - tõlget pole vaja.
Kasuta tähekomponentide sagedust: krüpteeritud teksti analüüsimisel, kompressiooni optimeerimisel, kodeeringu vigade tuvastamisel või mis tahes keele puhul (see on universaalne). Kasuta sõnasagedust: semantilise tähenduse jaoks - märksõnade eraldamiseks, sisu analüüsiks, SEO optimeerimiseks või teksti mõistmiseks. Tähekomponentide analüüs on madalamal tasemel ja keelest sõltumatu; sõnasageduse analüüs on kõrgemal tasemel ja tähendusele keskendunud.
Algoritmid nagu Huffman kodeerimine määravad lühikesed binaarkoodid sagedastele tähtedele ja pikad koodid haruldastele. Näide: inglise keeles võib 'E' saada 3-bitise koodi (000), aga 'Z' 11 bitti. Kuna 'E' esineb 12,7% ajast ja 'Z' ainult 0,07%, säästetakse tohutult ruumi. See on põhimõte ZIP, GZIP ja paljude teiste kadudeta kompressiooniformaatide taga. Algoritm loob esmalt sagedusjaotuse, seejärel kodeerib statistika põhjal.
Sõltub eesmärgist. Krüptoanalüüsis hoia need eraldi - 'E' ja 'e' võivad dekrüpteeruda erinevateks tähtedeks. Lingvistiliseks analüüsiks või kompressiooni optimeerimiseks teisendad sageli kõik väiketähtedeks, et keskenduda tähemudelitele mitte kirjastiilile. See tööriist loendab need eraldi tähtedena, andes teile toorandmed tõlgendamiseks.
Mitte üksi, aga see aitab stilomeetrilisele analüüsile kaasa. Igal autoril on omad nüansid: kirjavahemärkide tihedus, keskmine sõnapikkus (kajastub tähejaotuses) ja tähtede kasutamise eripärad. Koos sõnavalikuga, lausestruktuuriga ja teiste näitajatega muutub tähekomponentide sagedus üheks andmepunktiks laiemas autorsuse sõrmejäljekujutises. Forensilised lingvistid kasutavad seda atributsioonikaasustes, kuid ükski üksik näitaja pole piisav.
Iga täht loetakse, kaasa arvatud tühikud, tabulaatorid, reavahetused, kirjavahemärgid ja erisümbolid. Tühikud on tavaliselt kõige sagedasem "täht" tavatekstis. See täielik loendus annab täieliku pildi teksti koostisest - kasulik peidetud vorminduse tuvastamiseks, koodi analüüsimiseks (kus sulgudel ja semikoolonitel on tähtsus) või krüpteeritud sõnumite struktuuri mõistmiseks.
Tööriist käsitleb tüüpdokumente hõlpsalt - kuni 50 000-100 000 tähemärki peaks igas kaasaegses brauseris hästi töötama. Sellest kaugemale võib JavaScripti andmetöötlus aeglaseks muutuda. Tervete raamatute või tohutute andmekogumite (miljonid tähemärgid) analüüsimiseks vajate serveri-poolset teostust Pythonis, Go's või mõnes muus keeles, mis on mõeldud rasketeks andmetöötlusteks. Igapäevaseks kasutamiseks sobib aga brauseripõhine tööriist täiesti.
MDN Web Docs: Map (JavaScript Hash Map rakendus) - Mozilla Developer Network'i ametlik dokumentatsioon räsimapi andmestruktuuridest, mida kasutatakse sagedusanalüüsis.
Shannon, C. E. (1951). "Prediction and entropy of printed English." The Bell System Technical Journal, 30(1), 50-64. - Alusuurimus infoteooriast ja tähekombinatsioonide sagedustest.
Huffman, D. A. (1952). "A Method for the Construction of Minimum-Redundancy Codes." Proceedings of the IRE, 40(9), 1098-1101. - Originaalartikkel Huffmani kodeerimisest, mis põhineb tähekombinatsioonide sagedustel.
Unicode märgisüsteemi kodeerimise standard - Ametlik Unicode Konsortsiumi dokumentatsioon märgikomplektide ja kodeerimise mõistmiseks.
Stallings, W. (2017). Krüptograafia ja võrgu turvalisus: Põhimõtted ja praktika (7. väljaanne). Pearson. - Põhjalik õpik krüptoanalüüsi tehnikatest, sealhulgas sagedusanalüüsist.
Huffmani kodeerimine - Wikipedia - Üksikasjalik selgitus kompressioonialgoritmitest, mis sõltuvad tähekombinatsioonide sagedustest.
Juola, P. (2006). "Authorship Attribution." Foundations and Trends in Information Retrieval, 1(3), 233-334. - Akadeemiline uurimus tähekombinatsioonide kasutamisest autorsuse tuvastamisel.
Oled valmis nägema, millised mustrid su tekstis peidus on? Aseta mis tahes sisu tööriiста ülaossa – krüpteeritud sõnumid, koodinäidised, kirjutatud tekstid või dokumendid mis tahes keeles. Visualiseering ilmub kohe, näidates täpselt, millised märgid su tekstis domineerivad. Kas sa tegeled koodiprobleemide lahendamise, šifrite analüüsimise või lihtsalt märkide jaotuse uurimisega, saad koheselt kasulikke ülevaateid.
Avasta rohkem tööriistu, mis võivad olla kasulikud teie töövoos