Jakobsen bez mezer
[krypto.git] / referencni.py
1 #!/usr/bin/env python
2
3 from itertools import combinations
4 import pickle
5 from ocesavac import ocesat
6 import codecs
7
8 ABECEDA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
9 MABECEDA = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ'
10
11 def nova_tabulka(tabulka, abc=MABECEDA):
12     celkem = sum(sum(tab2.values()) for tab2 in tabulka.values())
13     if celkem != 0:
14         for i in abc:
15             for j in abc:
16                 tabulka[i][j] /= float(celkem)
17     return tabulka
18
19 def poradi_dle_frekvence(freq):
20     return sorted(freq.keys(), key=freq.get, reverse=True)
21
22 class reference:
23     def __init__(self, tref, komentar=''):
24         self.abeceda = tref.abeceda
25         self.poradi = poradi_dle_frekvence(tref.frekvence)
26         self.tabulka = nova_tabulka(tref.tabulka, tref.abeceda)
27         self.komentar = komentar
28
29 class treference:
30     def __init__(self, mezery=True):
31         if mezery:
32             self.abeceda = MABECEDA
33         else:
34             self.abeceda = ABECEDA
35         self.mezery = mezery
36         self.frekvence = dict()
37         for c in self.abeceda:
38             self.frekvence[c] = 0
39         self.tabulka = dict()
40         for i in self.abeceda:
41             self.tabulka[i] = dict()
42             for j in self.abeceda:
43                 self.tabulka[i][j] = 0
44         self.soubory = []
45         
46     def pridej(self, soubor):
47         f = codecs.open(soubor, encoding='UTF-8')
48         text = ocesat(f.read(), self.mezery)
49         f.close()
50         for i in range(len(text) - 1):
51             self.tabulka[text[i]][text[i+1]] += 1
52             self.frekvence[text[i]] += 1
53         else:
54             self.frekvence[text[i+1]] += 1
55         self.soubory.append(soubor)
56
57 def uloz(co, kam):
58     f = open(kam, 'w')
59     pickle.dump(co, f)
60     f.close()
61
62 def nacti(odkud):
63     return pickle.load(open(odkud))