[Закрыть]
 
popoff.donetsk.ua
Писать безграмотно — значит посягать на время людей, к которым мы адресуемся. /Щерба Л.В./
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Статьи - Программирование - Модули - morph - Формат файла для хранения словоформ
Я это делаю
Персональное меню
Голосование
Деньги, либо любимое занятие? Постоянный адрес этого вопроса
Ваш возраст (не обязательно):

Введите целое число от 3 до 99.
Почему? (не обязательно):
Другие вопросы
Поиск по сайту
Реклама
Гинеколог, стоматолог, психотерапевт в Донецке
Статистика

Формат файла для хранения словоформ

Постоянный адрес статьи

Формат файла предоставляет следующие возможности:

  1. Проверить правильность написания слова

  2. Найти начальную форму слова

  3. Найти все формы заданного слова

  4. Совместим по данным со словарями ispell

Файл содержит в себе следующие данные:

  1. Правила преобразования слов (affix)

  2. Список начальных форм. (root)

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

  3. Дерево всех словоформ (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 дерево словоформ

Замечания:

  1. все смещения указываются относительно начала файла
  2. ссылки на начальные формы слов содержатся внутри дерева словоформ

Таблица правил преобразований (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*?     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

    Общая длина одного элемента вычисляется по формуле
:
      
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 перечень правил

Замечания:

  1. rule-list содержит в себе символы-идентификаторы правил, без учета rule-first
  2. максимальная длина слова - 255 символов
  3. максимальное количество правил, применимых к одному слову - 255
  4. если к слову можно применять одновременно несколько правил, то группы правил разделяются между собой символом '/'.
<?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
если символ не используется
?>

Замечания:

  1. максимальное количество дочерних элементов - 127
  2. максимальный диапазон символов, при котором возможно использование массива - 127

Последняя модификация: 11.10.06 15:18

Не проходите мимо! Оставьте Ваш комментарий в форуме! >>>