Skip to content
Snippets Groups Projects

Introduce Chars

Merged Björn Ludwig requested to merge introduce_chars into main
1 file
+ 2
2
Compare changes
  • Side-by-side
  • Inline
"""This module contains a class representing (special) character counts"""
__all__ = ["CharacterCounts"]
__all__ = ["CharProbs"]
import csv
from math import comb
@@ -8,11 +8,11 @@ from os.path import abspath, basename
from typing import Optional
from urllib.request import urlopen
from .types import CharSet, CharTuple
from src.ilp_keyboard_layout_optimization.type_aliases import CharSet, CharTuple
class CharacterCounts:
"""Instances represent all relevant (special) character counts
class CharProbs:
"""Instances represent all relevant (special) character probabilities
Parameters
----------
@@ -120,11 +120,10 @@ class CharacterCounts:
row["bigram"][0] in self.chars and row["bigram"][1] in self.chars
):
bi_probs[row["bigram"]] = absolute_count
total_sum = sum(bi_probs.values())
assert total_sum > 0
normalizer = 100 / total_sum
absolute_sum = sum(bi_probs.values())
for character, count in bi_probs.items():
bi_probs[character] = count / normalizer
bi_probs[character] = count / absolute_sum
assert round(sum(bi_probs.values()), 8) == 1
assert len(bi_probs) == reader.line_num or len(bi_probs) <= comb(
reader.line_num, 2
)
@@ -142,10 +141,10 @@ class CharacterCounts:
if __name__ == "__main__":
CharacterCounts(
("a", "b", "c"),
CharProbs(
None,
"http://www.ids-mannheim.de/fileadmin/kl/derewo/"
"DeReChar-v-uni-204-a-c-2018-02-28-1.0.csv",
"http://practicalcryptography.com/media/cryptanalysis/files/"
"icelandic_bigrams.txt",
"german_bigrams.txt",
)
Loading