Wordle(6)からの続き
wiki-5.txtは,WIkipediaデータセットのWikiText-103 word から5文字単語を取り出したものだった。これに対して,n-gramの出現頻度を,1-gram, 2-gram, 3-gramに対して求めるpythonプログラム ngrm.py を作る。1-gramはアルファベット1文字,2-gramは連続するアルファベット2文字,3-gramは連続するアルファベット3文字を表している。# usage: ngrm.py wiki-5.txt | sort -n -r -t , >! alphabet
import sys
a=[0 for i in range(26)]
b=[[0 for i in range(26)] for j in range(26)]
c=[[[0 for i in range(26)] for j in range(26)] for k in range(26)]
def n_gram(target, n):
return [ target[idx:idx + n] for idx in range(len(target) -n + 1) ]
f = open(sys.argv[1], 'r')
datalist = f.readlines()
for data in datalist:
for l in range(5):
x = data[l]
i = ord(x) - 97
a[i] = a[i] + 1
if l in range(4):
y = data[l+1]
j = ord(y) - 97
b[i][j] = b[i][j] + 1
if l in range(3):
z = data[l+2]
k = ord(z) -97
c[i][j][k] = c[i][j][k] + 1
for i in range(26):
if a[i] > 49:
print(a[i],",",chr(i + 97))
for l in range(26*26):
i = l // 26
j = l % 26
if b[i][j] > 49:
print(b[i][j],",",chr(i+97)+chr(j+97))
for l in range(26*26*26):
i = l // (26*26)
j = (l // 26) % 26
k = l % 26
if c[i][j][k] > 49:
print(c[i][j][k],",",chr(i+97)+chr(j+97)+chr(k+97))
f.close()
5730707 , e
4092848 , r
3965317 , a
3759319 , t
3424032 , s
3108801 , o
3068296 , i
2603632 , h
2600893 , l
2398537 , n
1734820 , d
1574948 , c
1501211 , u
1291809 , w
1195832 , m
1086248 , g
1076779 , er
964115 , f
962898 , th
882193 , b
801081 , p
746024 , te
729576 , y
674447 , he
651813 , ou
636278 , st
604734 , ar
563176 , hi
559096 , re
556926 , v
556020 , or
533535 , in
521374 , k
521197 , es
519713 , ch
518219 , ir
514744 , al
514410 , wh
493762 , the
473288 , ea
427832 , le
417701 , ic
412433 , whi
412193 , an
409812 , il
384013 , la
372098 , at
369592 , se
364056 , ed
362684 , ter