Можно ли использовать DAWG для хранения информации, связанной со словами?

Можно ли использовать DAWG для хранения вспомогательной информации, относящейся к каждому пути, например, частота слова в английском языке? Если да, то как я могу это сделать?

2

Решение

Как правило, вы не можете хранить информацию по каждому слову в DAWG так же, как в дереве или другой структуре данных. Причина этого в том, что несколько разных слов в DAWG могут совместно использовать узлы, поэтому существует риск, что информация для одного слова «просочится» в информацию для других слов.

В качестве простого примера предположим, что у нас есть DAWG для слов «is», «as», «i» и «a». В этом случае DAWG будет выглядеть так:

                     START
a /     \ i
ACC    ACC
s  \     / s
ACC

Обратите внимание, что узел, представляющий слова «как» и «есть», является точно таким же узлом. Следовательно, если вы попытаетесь аннотировать слово «как» информацией, узел, содержащий эту информацию, будет таким же, как и узел «есть», что означает, что слова «как» и «как» будут воспринимать одно и то же. набор информации.

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

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

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

Надеюсь это поможет!

2

Другие решения

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

2

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

Смотрите статью здесь: http://www.ic.unicamp.br/~reltech/1992/92-01.pdf
Смотрите хорошую реализацию здесь: https://github.com/WojciechMula/pyDAWG/blob/master/dawg_mph.c#L37

0
По вопросам рекламы [email protected]