Структура данных для хранения ассоциаций слов - PullRequest
5 голосов
/ 12 ноября 2011

Я пытаюсь реализовать предсказание, анализируя предложения.Рассмотрим следующие [довольно скучные] предложения

Call ABC
Call ABC again
Call DEF

Я хотел бы иметь структуру данных для приведенных выше предложений следующим образом:

Call: (ABC, 2), (again, 1), (DEF, 1)
ABC: (Call, 2), (again, 1)
again: (Call, 1), (ABC, 1)
DEF: (Call, 1)

В общем, Word: (Word_it_appears_with, Frequency), ....

Обратите внимание на внутреннюю избыточность данных этого типа.Очевидно, что если частота ABC равна 2 при Call, частота Call равна 2 при ABC.Как мне оптимизировать это?

Идея состоит в том, чтобы использовать эти данные при вводе нового предложения.Например, если набрано Call, то из данных легко сказать, что ABC с большей вероятностью будет присутствовать в предложении и предложит его в качестве первого предложения, затем снова и DEF.

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

Спасибо

Ответы [ 3 ]

1 голос
/ 12 ноября 2011

Возможно использование двунаправленного графика.Вы можете хранить слова как узлы, а края - как частоты.

0 голосов
/ 12 ноября 2011

Я бы рассмотрел один из двух вариантов:

Вариант 1:

class Freq {
    String otherWord;
    int freq;
}

Multimap<String, Freq> mymap;

или, может быть, таблица

Table<String, String, int>

Учитывая вышеупомянутый Freq: вы можете захотеть сделать двунаправленное отображение:

class Freq{
    String thisWord;
    int otherFreq;
    Freq otherWord;
}

Это позволит очень быстро обновить пары данных.

0 голосов
/ 12 ноября 2011

Вы также можете использовать следующую структуру данных:

Map<String, Map<String, Long>>
...