6.7800-project

✨ Convolve me, senpai!!! ✨

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
# Run this with PyPy or it will be super slow

import math

def c2l(c):
    if 'a' <= c <= 'z':
        return ord(c) - ord('a')
    elif c == ' ':
        return 26
    return 27

A = [[[0] * 28 for _ in range(28)] for _ in range(28)]

cnt = 0
with open('wikitext') as f:
    for l in f.readlines():
        l = list(map(c2l, l))
        print(cnt)
        cnt += 1
        for i in range(len(l) - 4):
            A[l[i]][l[i + 1]][l[i + 2]] += 1


with open('trigrams', 'w') as f:
    for i in range(28):
        for j in range(28):
            s = 1e-9
            for k in range(28):
                s += A[i][j][k]
            for k in range(28):
                f.write(str(math.log(A[i][j][k] / s + 1e-9)))
                f.write('\n')