Skip to content

Instantly share code, notes, and snippets.

@Chippiewill
Last active January 3, 2016 14:18
Show Gist options
  • Save Chippiewill/9a763fc0139e365eda89 to your computer and use it in GitHub Desktop.
Save Chippiewill/9a763fc0139e365eda89 to your computer and use it in GitHub Desktop.
n-gram analysis
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 2
static const char ALPHABET[] = "abcdefghijklmnopqrstuvwxyz";
unsigned result[sizeof(ALPHABET) / sizeof(ALPHABET[0]) - 1][sizeof(ALPHABET) / sizeof(ALPHABET[0]) - 1];
char buffer[SIZE];
char read_to_buffer(char c) {
c = tolower(c);
for(int i = 0; i < SIZE - 1; i++) {
buffer[i] = buffer[i+1];
}
buffer[SIZE-1] = c;
return c;
}
void initialize_buffer(FILE *file) {
for(int i = 0; i < SIZE; i++) {
char c = fgetc(file);
buffer[i] = c;
}
}
int buffer_in_alphabet() {
for(int i = 0; i < SIZE; i++) {
if(strchr(ALPHABET, buffer[i]) == NULL) {
return 0;
}
}
return 1;
}
void buffer_to_result() {
result[buffer[0] - ALPHABET[0]][buffer[1] - ALPHABET[0]]++;
}
int main(int argc, char *argv[] )
{
/* If the parameter count is wrong */
if ( argc != 2 ) /* argc should be 2 for correct execution */
{
/* We print argv[0] assuming it is the program name */
printf( "Usage: %s filename\n", argv[0] );
return 0;
}
FILE *file = fopen(argv[1], "r");
/* If the file didn't open properly */
if(file == NULL) {
printf("Error opening file! (Does not exist?)\n");
return 1;
}
char c;
initialize_buffer(file);
do
{
if(buffer_in_alphabet()) {
buffer_to_result();
}
} while (read_to_buffer(fgetc(file)) != EOF);
printf("%5c", ' ');
for(int i = 0; i < sizeof(ALPHABET) / sizeof(ALPHABET[0]) - 1; i++) {
printf("%5c", ALPHABET[i]);
}
printf("\n");
for(int i = 0; i < sizeof(ALPHABET) / sizeof(ALPHABET[0]) - 1; i++) {
printf("%5c", ALPHABET[i]);
for(int j = 0; j < sizeof(ALPHABET) / sizeof(ALPHABET[0]) - 1; j++) {
printf("%5i", result[i][j]);
}
printf("\n");
}
}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur venenatis facilisis ligula, ut sollicitudin lacus ultricies a. Sed turpis orci, tempor eu convallis pulvinar, pulvinar id velit. Mauris lacus tortor, dapibus ut vehicula eu, rutrum ac augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum pellentesque massa in libero suscipit congue. In mattis rutrum lacus, id pellentesque dolor pharetra in. Donec posuere lectus ut velit scelerisque, id dictum sem molestie. Suspendisse molestie commodo nisl, et condimentum erat sodales a.
Integer eget facilisis dui. Fusce facilisis id justo nec hendrerit. Sed elementum, lorem vel fringilla venenatis, mauris enim tristique ipsum, non placerat augue mauris in purus. Curabitur risus mauris, laoreet sit amet neque id, dapibus rutrum urna. Phasellus non iaculis tellus, vitae vestibulum elit. Nulla facilisi. Curabitur elit lorem, tincidunt nec nunc sit amet, mollis fringilla diam. Sed ornare leo vitae condimentum consectetur. Nulla ac leo commodo, posuere odio eu, feugiat eros. Nunc justo orci, luctus eu nisi nec, tristique auctor nulla. Fusce in laoreet arcu.
Sed ligula nulla, sodales auctor neque et, sollicitudin interdum risus. Ut volutpat tristique turpis ut pretium. In at velit non enim aliquet iaculis non eget nibh. Curabitur placerat accumsan turpis quis ornare. Sed pulvinar tincidunt neque, at sollicitudin nisl tempus vel. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce et condimentum magna. Praesent nunc sem, blandit eget nunc eu, sodales elementum diam. Suspendisse nisi lacus, efficitur non eleifend at, rhoncus pharetra dui. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse fringilla mattis odio sed porttitor. Phasellus ac justo venenatis, convallis nisl quis, sollicitudin quam. Pellentesque bibendum odio sit amet hendrerit luctus. Curabitur sed est sed ipsum aliquam congue id vitae purus. Donec nec pretium eros, ut varius dui. Nam placerat enim aliquet, mattis quam eget, vulputate augue.
In facilisis pellentesque ligula in fermentum. Sed accumsan, nibh quis auctor consectetur, risus magna faucibus sapien, eget fringilla metus lorem vel est. Integer blandit enim vestibulum, suscipit eros a, vestibulum nunc. Quisque sed luctus justo, sit amet gravida nisi. Fusce diam massa, luctus eget augue sed, malesuada pretium augue. Aliquam erat volutpat. Pellentesque mattis eleifend mauris a pellentesque. Etiam finibus gravida faucibus. Mauris non dui nulla.
Integer fringilla ut arcu in feugiat. Fusce viverra lacinia tellus, id mattis ligula fermentum euismod. Nullam vitae lectus orci. Pellentesque malesuada leo sed vulputate ornare. Pellentesque pulvinar velit non risus tristique, sit amet semper lectus hendrerit. Nullam eu tellus non justo hendrerit egestas. Phasellus in dapibus felis, ac molestie diam.
Pellentesque ligula massa, pulvinar nec aliquam vel, tempus at risus. Quisque vitae ipsum eget ante tempus iaculis id ut metus. Vestibulum porttitor vel magna laoreet suscipit. Nullam rhoncus risus at est egestas aliquam. Fusce eget nisi elementum, ornare justo quis, malesuada felis. Cras sit amet justo eget nibh condimentum semper. Nam ultricies mattis fringilla. Integer tristique non dui ut ullamcorper. Pellentesque eu venenatis sapien. Suspendisse nec metus eget felis malesuada interdum eget eu felis. Phasellus fermentum magna et nisi pellentesque, ac vestibulum urna imperdiet.
Vestibulum et efficitur nunc, non rutrum odio. Suspendisse et ex laoreet, vestibulum magna at, feugiat mauris. Nulla facilisi. Mauris dolor risus, elementum vel magna ac, pulvinar feugiat nunc. Curabitur condimentum ipsum quam, ac porta metus suscipit ac. Pellentesque sed metus condimentum, congue leo ut, ornare metus. Proin non nunc odio. Vestibulum iaculis ornare mi nec tincidunt. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse a pretium purus. Donec fringilla efficitur elit nec egestas. Donec commodo, ante in rutrum porttitor, nunc est varius dolor, fringilla ultrices tortor augue nec eros. Nullam ac mauris eget quam sollicitudin maximus. Sed condimentum molestie lectus, non viverra sem finibus at. Phasellus eget placerat neque.
Nulla facilisi. Aenean et mauris laoreet, aliquet felis non, tristique orci. Sed eget mauris feugiat, sollicitudin neque ut, cursus est. Nulla venenatis eros eros, ac pharetra diam scelerisque eu. Integer eget turpis sed augue commodo blandit. In facilisis quam ligula, non dapibus lacus bibendum et. Aenean convallis nisi eu mollis iaculis. Aliquam erat volutpat. Fusce auctor ultricies volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse eu consectetur massa. In scelerisque accumsan erat quis luctus. Cras placerat massa lobortis quam convallis, volutpat dapibus ante consequat. Integer at dignissim tellus, et rhoncus nisl.
Sed id arcu eu sapien dignissim sagittis eget volutpat nisl. Sed dui nisl, suscipit sed aliquet pulvinar, dignissim quis mi. Aenean lobortis dictum orci ac volutpat. Sed ac vulputate libero. Nam rhoncus lectus lorem, sed pretium massa convallis eget. Phasellus sagittis pellentesque tellus a ornare. Vivamus pellentesque a ex luctus gravida. Nulla ultrices luctus sapien, pulvinar pellentesque diam vehicula in. Suspendisse potenti. Nam ut magna vulputate, porttitor erat luctus, sollicitudin lorem. Cras lacus ligula, pulvinar at quam sit amet, aliquam consectetur metus. Curabitur consequat, purus sit amet porta semper, metus mi sagittis neque, quis imperdiet ligula orci et nisl. Sed semper metus quis nisl dapibus lobortis.
Nunc libero orci, semper vel luctus sit amet, convallis non dolor. Nam ullamcorper ullamcorper magna, nec rutrum libero dictum ac. Quisque in elementum tellus. Maecenas id est eget justo ornare tristique quis quis erat. Curabitur sit amet laoreet dui. Donec odio enim, imperdiet maximus suscipit sed, vehicula nec leo. Aliquam erat volutpat. Praesent ac erat at lorem auctor finibus nec eu urna. Aenean ac sollicitudin nibh. Donec ultricies nisl at cursus consequat.
In at elit non dui interdum consectetur in vitae ante. Suspendisse tristique, purus at vulputate blandit, nisl eros lacinia tellus, a scelerisque urna orci in nisi. Donec ac malesuada nulla. Duis in venenatis ipsum, dignissim posuere augue. Ut condimentum eros quis feugiat ultricies. Pellentesque egestas lacus elit, id fermentum felis sollicitudin eu. Etiam sed massa imperdiet, auctor metus vitae, rutrum nulla. Mauris facilisis volutpat quam. Sed ut lorem euismod, rutrum neque ut, placerat mauris. Aliquam varius eleifend lorem. Nam mauris turpis, dictum vitae risus sit amet, porttitor congue eros. Nunc sed iaculis nulla. Mauris venenatis libero libero, a eleifend arcu posuere id.
Aenean egestas ipsum at nibh lacinia, sit amet maximus dui tempor. Aenean efficitur turpis nec justo lacinia, non rhoncus ante facilisis. Nulla commodo magna ipsum, vel hendrerit felis porttitor ac. Praesent sollicitudin magna non lorem dapibus vulputate. In lacinia congue scelerisque. Mauris mollis pulvinar quam. Quisque id neque gravida, feugiat risus pharetra, porttitor tellus. Vivamus tortor nisi, finibus faucibus feugiat eget, aliquet nec sapien. Donec dui lorem, vulputate eget dignissim quis, sagittis at turpis. Donec fermentum a nibh ut bibendum. In in tellus sit amet tellus congue gravida id et felis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent feugiat, eros at iaculis fringilla, libero justo tincidunt orci, non venenatis urna nunc eget quam. Sed lorem felis, fringilla ut eleifend ac, gravida quis ligula. Donec leo odio, tempus sit amet lacinia at, tristique a lacus. Nulla ultrices vehicula ante, sit amet eleifend neque feugiat ac.
Integer tincidunt volutpat posuere. Nulla in posuere ipsum. Sed iaculis, felis a rutrum lobortis, nisl quam viverra ante, vel pellentesque neque felis nec eros. Integer sed augue tristique, suscipit lacus sed, tristique elit. Sed ultrices sem sit amet justo posuere tempus. Donec id sapien lobortis, euismod turpis vel, congue dolor. Sed eget consequat dui. Donec commodo justo id ipsum interdum faucibus. Pellentesque quis libero eget orci suscipit molestie.
Praesent consectetur a erat at auctor. Nulla nec diam nunc. Quisque maximus metus at eros aliquet, ac luctus nulla vehicula. Fusce ut magna et sapien consequat posuere. Phasellus sit amet tortor enim. Sed laoreet pharetra est ac tristique. Suspendisse iaculis porta nulla, ut ornare nunc convallis sit amet. Phasellus faucibus sollicitudin nunc, nec commodo sapien accumsan eu. Vivamus fermentum ipsum eu pellentesque iaculis. Pellentesque sodales posuere efficitur. Etiam pharetra purus quis sem maximus tincidunt. Cras id risus sed velit efficitur iaculis.
Sed ut suscipit turpis, sed vestibulum lorem. In rutrum, mi nec interdum vehicula, lectus mi vestibulum mauris, ac hendrerit nulla nunc at ligula. Donec egestas, arcu ac convallis bibendum, quam sem dignissim ante, eget tincidunt purus velit eget odio. Ut accumsan lobortis maximus. Maecenas dignissim cursus turpis, quis aliquet lacus malesuada a. Nulla congue sit amet odio sed fringilla. Nulla ac cursus ex. Fusce sed efficitur augue. Maecenas massa metus, posuere a accumsan id, fermentum sit amet justo. Praesent vestibulum at nunc non eleifend. Maecenas semper dolor ut sem bibendum, eget tempus tellus bibendum. Fusce posuere feugiat dui, id dictum neque tempor dictum. Maecenas sodales vulputate facilisis. Cras at facilisis quam.
Cras eget felis risus. Nunc vulputate, ex nec gravida laoreet, nisi nunc varius metus, quis dapibus turpis elit ac lorem. Morbi non erat aliquam, consequat odio eget, congue metus. Proin non nisi id dolor pulvinar sollicitudin finibus non lectus. Duis malesuada vehicula scelerisque. Duis semper orci non nisl vestibulum placerat. Mauris quam felis, auctor vel viverra id, sagittis at massa. Ut aliquam elit ut viverra semper. Integer imperdiet ipsum ut fringilla iaculis. Sed non suscipit nunc, sit amet finibus arcu. Nam erat arcu, placerat pretium ligula at, porta fermentum nisi. Proin justo tortor, consequat id suscipit finibus, eleifend sit amet lorem. Nulla convallis justo at faucibus maximus.
Pellentesque blandit urna non libero pulvinar, id porta felis tincidunt. Aenean ultrices, ipsum non scelerisque posuere, ante neque malesuada dui, quis mattis purus sapien vitae nisl. Nulla consectetur rhoncus magna id posuere. In viverra risus vitae mattis lacinia. Cras ut lectus vitae sem suscipit suscipit nec at tellus. Morbi ut justo congue, tincidunt metus eu, luctus nunc. Aenean ipsum magna, consequat et commodo eu, tristique quis mi. Donec eget tempus augue. Ut non lacus quam. Nullam et risus eros. Sed pharetra scelerisque facilisis. Sed neque turpis, sagittis vel augue vel, aliquet consectetur quam.
Curabitur maximus mollis accumsan. Sed in velit a dolor ullamcorper porta congue eget sem. Fusce ut consectetur ex. Proin quis dui bibendum ipsum volutpat laoreet. Mauris sed mi vel turpis vulputate pharetra. Pellentesque a lectus id enim faucibus porttitor. Ut ut rhoncus est. Morbi tincidunt fermentum odio, quis tempor tortor fermentum vitae. Aenean vel consectetur metus, nec dignissim dolor. Fusce eu dui id lacus tempor convallis eu molestie nulla. Morbi ut iaculis velit. Vestibulum aliquam ante eu tincidunt tempus. Nunc in ultricies magna, sed blandit turpis.
Aenean viverra, turpis eget rutrum lacinia, nisl ante pulvinar arcu, rutrum vulputate nunc sem ac tortor. Cras tincidunt nibh et tellus molestie, in viverra nisl dapibus. Aenean vitae tortor eget ligula eleifend bibendum ac at purus. Cras nec porta sapien. Praesent interdum ultricies varius. Morbi facilisis nunc lacus, eget auctor sem malesuada in. Nullam lobortis arcu sapien, et accumsan odio dapibus quis. Aliquam consequat fermentum erat. Quisque in purus at felis pretium ornare in sit amet massa. Nulla facilisi.
Nam sit amet commodo velit, eget ullamcorper eros. Donec porttitor tortor nisi, sed porttitor nulla pretium id. Nunc convallis vehicula varius. Quisque tincidunt aliquet turpis eu interdum. Praesent porta, erat vel fermentum pellentesque, mauris elit tristique nulla, sit amet elementum elit magna vitae dui. Praesent ultricies tempor vehicula. Vestibulum varius luctus sapien sit amet faucibus. Proin cursus libero a urna cursus dignissim. Donec sagittis leo varius quam auctor, in semper augue viverra. Ut venenatis ante at tortor tincidunt blandit.
import collections
import sys
from prettytable import PrettyTable
SIZE = 2
ALPHABET = "abcdefghijklmnopqrstuvwxyz"
with open(sys.argv[1]) as f:
process = f.read()
count = collections.defaultdict(int)
for pointer in range(len(process) - (SIZE-1)):
for character in process[pointer:pointer+SIZE]:
if character not in ALPHABET:
break
else:
count[process[pointer:pointer+SIZE]] += 1
if SIZE == 2:
table = PrettyTable([" "] + list(ALPHABET))
for c in ALPHABET:
table.add_row([c] + [count[c + d] for d in ALPHABET])
print "The count of each bigram is: "
print table
else:
print sorted(count.iteritems())
$ python ngram.py lorum.txt
The count of each bigram is:
+---+-----+----+----+----+-----+---+----+---+-----+---+---+-----+-----+-----+----+----+----+-----+-----+-----+-----+----+---+---+---+---+
| | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
+---+-----+----+----+----+-----+---+----+---+-----+---+---+-----+-----+-----+----+----+----+-----+-----+-----+-----+----+---+---+---+---+
| a | 0 | 11 | 97 | 15 | 31 | 0 | 22 | 0 | 0 | 0 | 0 | 44 | 91 | 42 | 9 | 24 | 0 | 48 | 42 | 109 | 53 | 7 | 0 | 8 | 0 | 0 |
| b | 0 | 0 | 0 | 0 | 18 | 0 | 0 | 7 | 29 | 0 | 0 | 7 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 43 | 0 | 0 | 0 | 0 | 0 |
| c | 0 | 0 | 8 | 0 | 41 | 0 | 0 | 0 | 104 | 0 | 0 | 0 | 0 | 0 | 66 | 0 | 0 | 0 | 0 | 51 | 66 | 0 | 0 | 0 | 0 | 0 |
| d | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 77 | 0 | 0 | 0 | 0 | 0 | 19 | 0 | 0 | 6 | 0 | 0 | 46 | 0 | 0 | 0 | 0 | 0 |
| e | 11 | 0 | 65 | 45 | 9 | 7 | 51 | 9 | 9 | 0 | 0 | 120 | 55 | 155 | 9 | 2 | 22 | 134 | 107 | 151 | 36 | 0 | 0 | 5 | 0 | 0 |
| f | 28 | 0 | 0 | 0 | 47 | 7 | 0 | 0 | 14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| g | 0 | 0 | 0 | 0 | 51 | 0 | 0 | 0 | 30 | 0 | 0 | 0 | 0 | 24 | 0 | 0 | 0 | 7 | 0 | 0 | 36 | 0 | 0 | 0 | 0 | 0 |
| h | 18 | 0 | 0 | 0 | 6 | 0 | 0 | 0 | 11 | 0 | 0 | 0 | 0 | 0 | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| i | 45 | 68 | 48 | 48 | 32 | 9 | 21 | 0 | 0 | 0 | 0 | 28 | 41 | 105 | 14 | 31 | 37 | 0 | 259 | 138 | 16 | 12 | 0 | 0 | 0 | 0 |
| j | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 16 | 0 | 0 | 0 | 0 | 0 |
| k | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| l | 118 | 0 | 0 | 0 | 88 | 0 | 0 | 0 | 136 | 0 | 0 | 123 | 0 | 0 | 31 | 11 | 0 | 0 | 0 | 14 | 61 | 13 | 0 | 0 | 0 | 0 |
| m | 65 | 0 | 5 | 0 | 74 | 0 | 0 | 0 | 9 | 0 | 0 | 0 | 9 | 0 | 25 | 28 | 0 | 0 | 8 | 0 | 11 | 0 | 0 | 0 | 0 | 0 |
| n | 61 | 0 | 48 | 48 | 75 | 0 | 24 | 0 | 65 | 0 | 0 | 0 | 0 | 0 | 30 | 0 | 0 | 0 | 20 | 112 | 33 | 11 | 0 | 0 | 0 | 0 |
| o | 0 | 7 | 2 | 29 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | 44 | 9 | 103 | 0 | 0 | 0 | 143 | 36 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| p | 11 | 0 | 0 | 0 | 44 | 0 | 0 | 8 | 54 | 0 | 0 | 8 | 0 | 0 | 39 | 0 | 0 | 10 | 17 | 4 | 42 | 0 | 0 | 0 | 0 | 0 |
| q | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 142 | 0 | 0 | 0 | 0 | 0 |
| r | 77 | 7 | 21 | 13 | 70 | 0 | 0 | 7 | 99 | 0 | 0 | 0 | 12 | 17 | 29 | 23 | 2 | 9 | 6 | 35 | 34 | 0 | 0 | 0 | 0 | 0 |
| s | 37 | 0 | 34 | 0 | 91 | 0 | 0 | 0 | 63 | 0 | 0 | 15 | 3 | 0 | 19 | 10 | 42 | 0 | 31 | 73 | 75 | 0 | 0 | 0 | 0 | 0 |
| t | 45 | 0 | 0 | 0 | 108 | 0 | 0 | 0 | 108 | 0 | 0 | 0 | 0 | 0 | 62 | 11 | 0 | 52 | 0 | 25 | 131 | 0 | 0 | 0 | 0 | 0 |
| u | 50 | 3 | 33 | 12 | 118 | 0 | 24 | 0 | 51 | 0 | 0 | 126 | 109 | 39 | 0 | 0 | 0 | 98 | 217 | 60 | 0 | 0 | 0 | 0 | 0 | 0 |
| v | 22 | 0 | 0 | 0 | 61 | 0 | 0 | 0 | 43 | 0 | 0 | 0 | 0 | 0 | 11 | 0 | 0 | 0 | 0 | 0 | 11 | 0 | 0 | 0 | 0 | 0 |
| w | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| x | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| y | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| z | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---+-----+----+----+----+-----+---+----+---+-----+---+---+-----+-----+-----+----+----+----+-----+-----+-----+-----+----+---+---+---+---+
$ gcc bigram.c -o bigram && ./bigram lorum.txt
a b c d e f g h i j k l m n o p q r s t u v w x y z
a 0 11 97 15 42 0 22 0 0 0 0 49 91 42 9 24 0 48 42 109 53 7 0 8 0 0
b 0 0 0 0 18 0 0 7 29 0 0 7 0 0 7 0 0 0 0 0 43 0 0 0 0 0
c 0 0 8 0 41 0 0 0 104 0 0 2 0 0 66 0 0 9 0 51 76 0 0 0 0 0
d 34 0 0 0 0 0 0 0 77 0 0 0 0 0 35 0 0 6 0 0 49 0 0 0 0 0
e 11 0 65 45 9 7 51 9 9 0 0 120 55 155 9 2 22 134 107 154 36 0 0 5 0 0
f 28 0 0 0 47 7 0 0 14 0 0 0 0 0 0 0 0 12 0 0 12 0 0 0 0 0
g 0 0 0 0 51 0 0 0 30 0 0 0 0 24 0 0 0 7 0 0 36 0 0 0 0 0
h 18 0 0 0 6 0 0 0 11 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0
i 45 68 48 48 32 9 21 0 0 0 0 28 41 125 14 31 37 0 259 138 16 12 0 0 0 0
j 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 0 0 0 0 0
k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
l 118 0 0 0 88 0 0 0 136 0 0 123 0 0 31 11 0 0 0 14 61 13 0 0 0 0
m 78 0 5 0 74 0 0 0 9 0 0 0 9 0 30 28 0 0 8 0 11 0 0 0 0 0
n 69 0 48 48 75 0 24 0 65 0 0 0 0 0 30 0 0 0 20 112 60 11 0 0 0 0
o 0 7 2 29 0 0 0 0 5 0 0 44 9 103 0 0 0 143 36 1 0 0 0 0 0 0
p 11 0 0 0 58 0 0 16 54 0 0 8 0 0 39 0 0 24 17 4 42 0 0 0 0 0
q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 149 0 0 0 0 0
r 77 7 21 13 70 0 0 7 99 0 0 0 12 17 29 23 2 9 6 35 34 0 0 0 0 0
s 37 0 34 0 114 0 0 0 63 0 0 15 3 0 19 10 42 0 31 73 85 0 0 0 0 0
t 45 0 0 0 108 0 0 0 108 0 0 0 0 0 62 11 0 52 0 25 131 0 0 0 0 0
u 50 3 33 12 118 0 24 0 51 0 0 126 109 39 0 0 0 98 217 67 0 0 0 0 0 0
v 22 0 0 0 68 0 0 0 46 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0
w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
x 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment