Формат файла для хранения словоформ |  |
Формат файла предоставляет следующие возможности:
Проверить правильность написания слова
Найти начальную форму слова
Найти все формы заданного слова
Совместим по данным со словарями ispell
Файл содержит в себе следующие данные:
Правила преобразования слов (affix)
Список начальных форм. (root)
Для каждой формы указывается перечень правил, которые можно применить к
этому слову для получения словоформ.
Дерево всех словоформ (tree)
Для каждой словоформы указывается перечень начальных форм,
из которых эта словоформа может быть получена.
Общая структура файла
|
смещение
|
длина
|
имя
|
значение
|
|
0
|
4
|
file-id
|
идентификатор файла - всегда содержит в себе десятичное число
1720536849 (0x66, 0x8d, 0x4f, 0x11)
|
|
4
|
8
|
language
|
имя языка.
латинскими буквами, в нижнем регистре,
справа дополняется пробелами
|
|
12
|
4
|
tree-offset
|
смещение для корневого узла дерева словоформ (tree)
|
|
16
|
?
|
affix
|
таблица правил преобразований
|
|
?
|
?
|
root
|
таблица начальных форм слов
|
|
tree-offset
|
?
|
tree-root
|
корневой узел дерева словоформ
|
|
?
|
?
|
tree
|
дерево словоформ
|
Замечания:
-
все смещения указываются относительно начала файла
-
ссылки на начальные формы слов содержатся внутри дерева словоформ
Таблица правил преобразований (affix)
<?html Особенности: 1. Правила преобразования не могут измениться после создания файла. Для того, чтобы изменить правила преобразования, нужно обновить весь файл. 2. Максимальное количество правил - 255 3. Правило - это список элементов. 4. Максимальное количество элементов в правиле - 65535 8. Формат таблицы правил преобразований: смещение длина имя значение 0 1 rule-first код первого правила (буквы) 1 1 rule-count общее количество правил 2+i*4 4 rule-offset-i смещение для правила c кодом [rule-first+i], i=0..rule-count-1 2+rule-count*4 ? rules с этого места идут сами правила
Замечания: - все смещения указываются в байтах относительно начала файла - rule-offset-i содержит в себе 0, если правило не определено (пропущено) - правила следуют непосредственно друг за другом, без пропусков
7. Формат правила:
смещение длина имя значение 0 2 element-count количество элементов в правиле 3 1 flags флаги 4 ? elements с этого места следуют сами элементы
flags: бит значение 0 0x01 * 1 0x02 ~ 2 0x04 suffix 3 0x08 prefix 4 не используется 5 не используется 6 не используется 7 не используется
Замечания: - элементы в правиле следуют непосредственно друг за другом, без пропусков
5. Элемент правила преобразования состоит из трех частей: element::- condition strip-lenght append-string condition-string - условие (в формате preg_match, без разделителей) strip-length - сколько символов с конца следует удалить append-string - строка, которую нужно добавить после удаления символов 5. Формат элемента:
смещение длина имя значение 0 1 condition-length длина строки условия 1 1 strip-length сколько символов с конца следует удалить 2 1 append-length длина строки, которую нужно добавить 3 condition-length condition-string условие 3+condition-length append-length append-string
Общая длина одного элемента вычисляется по формуле: 3 + condition-length + append-length
?>
Начальная форма слова (root)
|
смещение
|
длина
|
имя
|
значение
|
|
0
|
1
|
length-word
|
длина начальной формы слова
|
|
1
|
1
|
count-rule
|
количество правил, которые могут быть применены к этому слову
|
|
2
|
length-word
|
word-string
|
строка, начальная форма слова
|
|
2+length-word
|
count-rules
|
rule-list
|
перечень правил
|
Замечания:
-
rule-list содержит в себе символы-идентификаторы правил, без учета rule-first
-
максимальная длина слова - 255 символов
-
максимальное количество правил, применимых к одному слову - 255
-
если к слову можно применять одновременно несколько правил, то группы правил разделяются между собой символом '/'.
<?html ЭЛЕМЕНТ ДЕРЕВА СЛОВОФОРМ (TREE) -------------------------------------- 1. Формат элемента дерева словоформ смещение длина имя значение 0 1 length младшие 5 бит (length-append) - сколько символов нужно добавить для получения строки, соответствующей этой вершине старшие 3 бита (count-root) - количество начальных форм в root-list 1 append-length append-string эти самые символы, которые нужно добавить 1+append-length 4*count-root root-list список начальных форм (указатели) 1+append+4*root 1 char-count длина диапазона следующих символов бит 8 - если установлен, значит использовать вариант 2 (с массивом) ------ следующие поля есть, если char-count>0 ------ следующие поля есть, если бит 8 в char-count = 0 2+append+4*root 1 char-1 код первого символа 3+append+4*root 4 char-offset-1 указатели на элементы дерева
4+append+4*root 1 char-2 код второго символа 5+append+4*root 4 char-offset-2 указатели на элемент дерева ....... ------ следующие поля есть, если бит 8 в char-count = 1 2+append+4*root 1 char-first код первого символа диапазона 3+append+4*root 4*char-count char-offset указатели на элементы дерева 0, если символ не используется ?>
Замечания:
-
максимальное количество дочерних элементов - 127
-
максимальный диапазон символов, при котором возможно использование массива - 127
Последняя модификация: 11.10.06 15:18 q Не проходите мимо! Оставьте Ваш комментарий в форуме! >>> Цитирование материалов моего сайта приветствуется! при условии видимой действующей! гиперссылки на мой сайт. [Ссылки] Если Вы нашли опечатку на этой странице, пожалуйста, выделите ее мышью и нажмите Ctrl+Enter. Сделаем язык чище! (c) Yuri Popoff, 2004 - 2008, popoff.donetsk.ua, style.donetsk.ua |
|