В процессе решения задачи быстрого подсчета частот совместных появлений слов в тексте создал интересную структуру данных, которая также позволяет вычислять частоты появления первого слова проверяемой пары, а также эта структура строит префиксное дерево, которое может быть использовано в последующем анализе текста.
Исходный код доступен на GitHub: github.com/Maxime2/cooccurrences
Когда вы выполните команду make, вы должны увидеть такой вывод:
cc -O3 -funsigned-char cooccur.c -o cooccur -lm
Example 1
./cooccur a.txt 2 < a.in | tee a.out
Checking pair d e
Count:3 cocount:3
Relative frequency: 1.00
Checking pair a b
Count:3 cocount:1
Relative frequency: 0.33
Example 2
./cooccur b.txt 3 < b.in | tee b.out
Checking pair a penny
Count:3 cocount:3
Relative frequency: 1.00
Checking pair penny earned
Count:4 cocount:1
Relative frequency: 0.25
Программа cooccur принимает два аргумента: имя файла для обработки и размер окна слов, в котором считаются частоты совместного появления. После обработки текста и заполнения этой структуры данных, программа считывает пары слов со стандартного файла ввода, по одной паре на строку, и подсчитывает частоту появления первого слова пары в текста и частоту совместного появления в тексте указанной пары слов в пределах заданного окна. Если второе слово встречается более одного раза в окне, только первое появление учитывается.
Примеры взяты отсюда: