Как эффективно хранить большое количество нграмм? - PullRequest
3 голосов
/ 12 октября 2011

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

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

Я обычно думал о том, чтобы построить большую таблицу в реляционной базе данных со схемой, подобной (ITEM-NAME, GRAM1, GRAM2... GRAM65535), и сохранить в ней частоты, но я вижу, что этот подход бесперспективен из-за количества столбцов.

Я знаю, что там должны быть лучшие решения, но я не знаю, где искать.

Предложения

1 Ответ

1 голос
/ 13 октября 2011

Лучший способ сохранить ngram - это prefixTree IMHO. Используется в очень эффективной библиотеке lingpipe.

Пример дерева:

 1. gr1
   1. gr2 (item1)
   2. gr3 (item2,item3,item4)
 2. gr3 (item1, tem2)
 3. gr2
  1. g3 (item5,item6)
  2. g4 (item1)

Другой вариант - хранить в формате инвертированного индекса: нграмм -> пункт

gr1 (item1, item2)
gr2 (item1, item3)
gr3 (item2, item3)
gr4 (item1, item2)

Примечание: второй вариант не хранит информацию о заказе, которая имеет решающее значение для ngram ...

...