Морфологический анализатор реализован в виде динамической библиотеки с экспортируемыми функциями в стиле "C". Размер библиотеки со словарем - немногим более двух Mb. Двоичный словарь включен в виде данных, что позволяет операционным системам оптимальным образом подгружать и выгружать его страницы по мере надобности. Последнее (вкупе со способом организации словаря - см. выше) обеспечивает высокую производительность анализатора - более двадцати тысяч слов в секунду в режиме лемматизации с построением текстов нормальных форм слов и грамматических описаний отождествлений.
Генерация словаря происходит полностью автоматически, процесс этот занимает не более трех минут.
Алгоритм работы модуля предельно прост и представляет собой интерпретатор таблиц переходов конечного автомата, в то время как страницы словаря являются этими самыми таблицами.
Благодаря этим решениям словарь модуля компактный - пара мегабайт, и демонстрирует производительность не менее сотни тысяч слов в секунду в режиме лемматизации (построения текстов нормальных форм слова).
wInfo & 0x3F | Мнемоника | Часть речи украинская |
---|---|---|
1 | ч | Неодушевленное существительное мужского рода |
2 | чi | Одушевленное существительное мужского рода |
3 | ч/ж | Неодушевленное существительное общего рода |
4 | чi/жi | Одушевленное существительное общего рода |
5 | ч/с | Неодушевленное существительное мужского/среднего рода |
6 | чi/сi | Одушевленное существительное мужского/среднего рода |
7 | ж | Неодушевленное существительное женского рода |
8 | жi | Одушевленное существительное женского рода |
9 | ж/с | Неодушевленное существительное женского/среднего рода |
10 | с | Неодушевленное существительное среднего рода |
11 | сi | Одушевленное существительное среднего рода |
12 | мн | Неодушевленное существительное множественного числа |
13 | мнi | Одушевленное существительное множественного числа |
14 | ч-ж | Неодушевленное существительное мужского рода, изменяющееся по схеме женского |
15 | чi-жi | Одушевленное существительное мужского рода, изменяющееся по схеме женского |
16 | п | Прилагательное |
17 | числ | Числительное |
18 | числ_2 | Числительное “два” (имеющее род) |
19 | числ_п | Порядковое числительное |
20 | з | Личное местоимение (местоимение - существительное, например, “вiн” - он) |
21 | зп | Местоимение - прилагательное |
22 | ipf | Глагол несовершенного вида |
24 | pf | Глагол совершенного вида |
26 | pfipf | Двувидовой глагол |
28 | виг. | Междометье |
29 | прийм. | Предлог |
30 | присл. | Наречие |
31 | спол. | Союз |
32 | част. | Частица |
33 | незм. | Неизменяемое слово без указания части речи |
34 | вводн. | Вводное слово |
35 | аб. | Аббревиатура |
Ниже приведены мнемоники из файла прототипов со значениями и толкованиями каждого из них:
Признак | Значение | Толкование | Встречается у |
---|---|---|---|
gfRetForms | 0x8000 | Признак возвратности | прилагательных, глаголов |
gfFormMask | 0x7000 | Маска зоны указания падежа | глаголов, прилагательных, существительных, числительных, местоимений |
gfNominative | 0x0000 | Именительный падеж | —”— |
gfGenative | 0x1000 | Родительный падеж | —”— |
gfDative | 0x2000 | Дательный падеж | —”— |
gfAccusative | 0x3000 | Винительный падеж | —”— |
gfInstrumental | 0x4000 | Творительный падеж | —”— |
gfPrepositional | 0x5000 | Предложный падеж | —”— |
gfCalling | 0x6000 | Звательный падеж | —”— |
gfGendMask | 0x0E00 | Маска зоны рода и числа | —”— |
gfMasculine | 0x0200 | Мужской род | —”— |
gfFeminine | 0x0400 | Женский род | —”— |
gfNewtral | 0x0600 | Средний род | —”— |
gfMultiple | 0x0800 | Множественное число | —”— |
gfVerbForm | 0x0060 | Маска зоны личностности | глаголов |
vfPersonal | 0x0000 | Личная форма | —”— |
vfActive | 0x0020 | Действительное причастие | —”— |
vfPassiv | 0x0040 | Страдательное причастие | —”— |
vfGerund | 0x0060 | Деепричастие | —”— |
gfVerbFace | 0x0018 | Маска зоны лица | —”— |
vbFirstFace | 0x0008 | Первое лицо | —”— |
vbSecondFace | 0x0010 | Второе лицо | —”— |
vbThirdFace | 0x0018 | Третье лицо | —”— |
gfVerbTime | 0x0007 | Маска зоны времени | —”— |
vtInfinitiv | 0x0001 | Инфинитив (неопределенная форма) | —”— |
vtImperativ | 0x0002 | Императив (повелительное наклонение) | —”— |
vtFuture | 0x0003 | Будущее время | —”— |
vtPresent | 0x0004 | Настоящее время | —”— |
vtPast | 0x0005 | Прошедшее время | —”— |
Признак | Значение | Толкование |
---|---|---|
afAnimated | 0x01 | Данная форма прилагательного или причастия согласуется только с одушевленными существительными |
afNotAlive | 0x02 | Данная форма прилагательного или причастия согласуется только с неодушевленными существительными |
afHardForm | 0x04 | Затрудненная форма, отождествление которой возможно лишь в режиме распознавания затрудненных форм слов |
Часть речи | FID | Толкование | ||||
---|---|---|---|---|---|---|
существительное | 0 | ед. | именительный падеж | |||
1 | родительный падеж | |||||
2 | дательный падеж | |||||
3 | винительный падеж | |||||
5 | творительный падеж | |||||
6 | предложный падеж | |||||
7 | звательный падеж | |||||
10 | мн. | именительный падеж | ||||
11 | родительный падеж | |||||
12 | дательный падеж | |||||
13 | винительный падеж | |||||
15 | творительный падеж | |||||
16 | предложный падеж | |||||
17 | звательный падеж | |||||
прилагательное | 0 | муж. | именительный падеж | |||
1 | родительный падеж | |||||
2 | дательный падеж | |||||
3 | винительный падеж, неодушевлённый | |||||
4 | винительный падеж, одушевлённый | |||||
5 | творительный падеж | |||||
6 | предложный падеж | |||||
8-13 | жен. | см. мужской род, формы 0 - 6 | ||||
16-22 | ср. | |||||
24-30 | мн. | |||||
глагол | 0 | инфинитив | регулярная форма | |||
1 | возвратная форма | |||||
2 | повелительное | невозвратный | ед. | |||
3 | мн. | |||||
4 | возвратный | ед. | ||||
5 | мн. | |||||
6 | буд. | 1-е лицо | невозвратная | ед. | ||
7 | мн. | |||||
8 | возвратная | ед. | ||||
9 | мн. | |||||
10 | 2-е лицо | невозвратная | ед. | |||
11 | мн. | |||||
12 | возвратная | ед. | ||||
13 | мн. | |||||
14 | 3-е лицо | невозвратная | ед. | |||
15 | мн. | |||||
16 | возвратная | ед. | ||||
17 | мн. | |||||
18 | наст. | 1-е лицо | невозвратная | ед. | ||
19 | мн. | |||||
20 | возвратная | ед. | ||||
21 | мн. | |||||
22 | 2-е лицо | невозвратная | ед. | |||
23 | мн. | |||||
24 | возвратная | ед. | ||||
25 | мн. | |||||
26 | 3-е лицо | невозвратная | ед. | |||
27 | мн. | |||||
28 | возвратная | ед. | ||||
29 | мн. | |||||
30-61 | причастие | действительное | невозвратное | словоизменение по схеме прилагательного | ||
62-93 | возвратное | |||||
94-125 | страдательное | |||||
126 | деепричастие | невозвратное | ||||
127 | возвратное | |||||
128 | прош. | невозвратные | муж. | |||
129 | жен. | |||||
130 | ср. | |||||
131 | мн. | |||||
132 | возвратные | муж. | ||||
133 | жен. | |||||
134 | ср. | |||||
135 | мн. | |||||
136-167 | причастие | действительное | невозвратное | словоизменение по схеме прилагательного | ||
168-199 | возвратное | |||||
200-231 | страдательное | |||||
232 | деепричастие | невозвратное | ||||
233 | возвратное |
Код ошибки | Значение | Толкование |
---|---|---|
LEMMBUFF_FAILED | -1 | При лемматизации переполнился массив нормальных форм |
LIDSBUFF_FAILED | -2 | При лемматизации переполнился массив идентификаторов лексем |
GRAMBUFF_FAILED | -3 | При лемматизации переполнился массив грамматических описаний |
WORDBUFF_FAILED | -4 | Слишком длинное исходное слово |
PAGELOAD_FAILED | -5 | Не удалась загрузка страницы словаря |
PAGELOCK_FAILED | -6 |
Настройка | Значение | Толкование |
---|---|---|
sfStopAfterFirst | 0x0001 | Достаточно одного отождествления |
sfIgnoreCapitals | 0x0002 | Игнорировать корректность капитализации |
sfHardForms | 0x0004 | Разрешать затрудненные словоформы |
Аргументы:
lpWord | – ASCIIZ-строка, украинское слово, правописание которого следует проверить; |
options | – настройки морфологического анализатора. |
Функция возвращает 0, если слово не опознано, 1 – если слово написано правильно или отрицательный код ошибки.
lpWord | – ASCIIZ-строка, слово, которое следует проанализировать; |
options | – настройки морфологического анализатора; |
lpLemm | – указатель на массив, принимающий нормальные формы слов, или NULL, если тексты нормальных форм не требуются; |
lpLIDs | – указатель на массив, принимающий идентификаторы лексем, или NULL, если идентификаторы лексем не требуются; |
lpGram | – указатель на массив, принимающий грамматические описания, или NULL, если они не требуются; |
ccLemm | – размерность массива lpLemm в байтах; |
cdwLID | – размерность массива lpLIDs в двойных словах; |
cbGram | – размерность массива lpGram в байтах. |
Тексты нормальных форм восстанавливаются в минимально допустимой степени капитализации, то есть если слово может быть написано всеми строчными буквами, оно восстанавливается всеми строчными, если только с заглавной буквы - то с заглавной, и т. д.
Грамматические описания восстанавливаются в “плавающем” формате. После отождествления массив psGInfo содержит количество блоков грамматических описаний, равное количеству нормальных форм. При этом каждый блок грамматического описания в начале содержит байт, указывающий количество структур SGramInfo, лежащих сразу после него.
Аргументы:
lpWord | – ASCIIZ-строка, слово, которое следует проанализировать, или NULL, если задан идентификатор лексемы; |
dwLexId | – идентификатор лексемы слова или 0, если построение формы идет по ключу – строке; |
options | – настройки морфологического анализатора; |
idForm | – идентификатор требуемой формы слова; |
lpDest | – указатель на массив, принимающий построенные формы; |
ccDest | – размерность массива lpDest в байтах. |
Аргументы:
lpWord | – ASCIIZ-строка, слово, которое следует проанализировать, или NULL, если задан идентификатор лексемы; |
dwLexId | – идентификатор лексемы слова или 0, если построение формы идет по ключу – строке; |
options | – настройки морфологического анализатора; |
grInfo | – расширенное грамматическое описание требуемой формы слова; |
bflags | – дополнительные грамматические флажки; |
lpDest | – указатель на массив, принимающий построенные формы; |
ccDest | – размерность массива lpDest в байтах. |
Аргументы:
enumproc | – адрес функции обработки лексемы; |
lpv | – пользовательский параметр, передаваемый функции enumproc. |
Прототип callback-функции перебора лексем:
Аргументы:
lid | – идентификатор лексемы; |
lpv | – параметр, переданный пользователем функции mlmaukEnumWords. |
Аргументы:
dwLexId | – идентификатор лексемы слова; |
wdinfo | – указатель на байт, получающий часть речи. |