СоНоты

Структура данных для счетчика совместных появлений, просто появлений и префиксного дерева

В процессе решения задачи быстрого подсчета частот совместных появлений слов в тексте создал интересную структуру данных, которая также позволяет вычислять частоты появления первого слова проверяемой пары, а также эта структура строит префиксное дерево, которое может быть использовано в последующем анализе текста.

Исходный код доступен на 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 принимает два аргумента: имя файла для обработки и размер окна слов, в котором считаются частоты совместного появления. После обработки текста и заполнения этой структуры данных, программа считывает пары слов со стандартного файла ввода, по одной паре на строку, и подсчитывает частоту появления первого слова пары в текста и частоту совместного появления в тексте указанной пары слов в пределах заданного окна. Если второе слово встречается более одного раза в окне, только первое появление учитывается.

Примеры взяты отсюда: