-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
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')