API для программного продукта
"Приведение слова к словарной форме"
(CWFAPI - Common lex Word Form Application Program
Interface)
Программный модуль предназначен для
определения
словарной формы произвольного русского слова. Реализован
в виде пары “лингвистическое
ядро - словари“ (DLL-файл и LEX-файлы). Общается с
вызывающим его приложением через
специальный программный интерфейс WFAPI, описываемом в
настоящем документе.
WFEC WFAPI WFInit ( WFID FAR * lpwfid );
lpwfid
- указатель, используемый при всех следующих вызовах
лингвистического модуля;
Отправная точка сеанса работы WF. После
успешной
инициализации должна быть вызвана программа WFOpenMdt(),
после которой могут вызываться
лингвистические программы. Если WFInit() отработает
неудачно (вернет не 0), нельзя
будет вызвать никакие другие программы, кроме WFInit(),
так как для других программ
требуется правильный дескриптор памяти. WFInit()
инициализирует структуры и ресурсы,
необходимые для последующих вызовов WF.
Указатель lpwfid должен быть дескриптором
памяти,
отведенной под переменные. Указатель lpwfid должен быть
установлен в wfidNil, если
случится ошибка.
Возвращает wfecNone при успешной
инициализации и
обновляет параметр lpwfid. В противном случае возвращает
WFEC, идентифицирующий
проблему. Возможные значения WFEC: wfecNone (=0 - нет
ошибок), wfecModuleInUse,
wfecOOM (out of memory).
WFEC
CWFAPI
WFOpenMdt (
WFID
wfid,
LPSPATH lpspathMdt
// Указатель
на путь к основному словарю;
);
wfid
- идентификатор, возвращаемый
WFInit();
lpspathMdt
- Указатель на полный путь к основному словарю (ANSI).
Эта программа регистрирует указанный основной
словарь
и позволяет пользоваться им в последующей работе WF.
Основной словарь открывается и проверяется,
но не
обязательно загружается. Эта программа должна быть
вызвана после WFInit() и до других
вызовов WF.
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC, идентифицирующий проблему. Возможные
значения WFEC: wfecNone (=0
- нет ошибок), wfecModuleInUse, wfecHaveMainDict (уже
открыт основной словарь),
wfecBadMainDict (- плохой основной словарь), wfecUnknown
(- неизвестная ошибка).
WFEC
CWFAPI
WFOpenUdr (
WFID
wfid,
LPSPATH lpspathUdr
//
Указатель на путь к словарю пользователя;
);
wfid
- идентификатор, возвращаемый
WFInit();
lpspathUdr
- Указатель на полный путь к словарю пользователя
(ANSI).
Эта программа открывает указанный
морфологический
словарь пользователя и позволяет пользоваться им в
последующей работе WF. Словарь
пользователя открывается, проверяется и загружается. Эта
программа должна быть вызвана
после WFInit()
и WFOpenMdt() и до других вызовов WF.
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC, идентифицирующий проблему. Возможные
значения WFEC: wfecNone (=0
- нет ошибок), wfecModuleInUse, wfecNoMainDict (основной
словарь еще не загружен), wfecUnknown
(неизвестная ошибка), wfecBadUserDict
(испорчен словарь пользователя).
typedef struct {
LPSTR lpszLexWordForm;
enum WFPOS iPartOfSpeech;
DWORD dwHighWordId;
DWORD dwLowWordId;
} HOM;
WFEC CWFAPI WFLexForm ( WFID wfid,
LPCSTR lpszInputWord,
LPDWORD lpdwMorph,
LPWORD lpwWordHomNum,
HOM *lpHom
);
wfid
- идентификатор, возвращаемый
WFInit();
lpszInputWord
- указатель на исходное слово;
lpdwMorph – указатель на 32-битное число, может принимать значение
1 или 0. Если = 1, то ищет словарную форму в словаре.
Если = 0, то в полях структуры
HOM
dwHighWordId и
dwLowWordId
возвращает значение эквивалентное вызову
функции WFCommonHashCode,
остальные поля структуры значения не имеют.
Если слово найдено в словаре (dwMorph=1
на входе), то
dwMorph
сохраняет значение равное 1. Если не
найдено, то значение становится равным 0, а
результат поиска эквивалентен запросу со
значением
dwMorph=0.
lpwWordHomNum
- входной/выходной параметр. На входе – максимальное
кол-во словарных статей ( структур
HOM), которое может быть сформировано на выходе для
данного слова. В большинстве
случаев будет найдена только одна статья. Для того,
чтобы заведомо получать всю
информацию из словаря, этот параметр д.б. больше или
равен MAX_OF_HOM. На выходе
– реально найденное количество структур HOM для данного
входного слова;
lpНom
- указатель на выходной массив структур HOM, содержащих
информацию о каждом омониме,
объясняющем исходное слово. В каждой структуре HOM
содержится:
lpszLexWordForm
- указатель на словарную форму (память не менее
MAX_WORD_LEN байт заказывает и освобождает
вызывающая программа);
iPartOfSpeech
- идентификатор части речи (см. файл сwfapi.h);
enum
WFPOS {
wfnoun
= 0, // Существительное
wfadject, // Прилагательное
wfverb, // Глагол
wfauxil, // Неизменяемое (кроме наречия, союза, частицы
и т.д.)
wfprepos, // Предлог
wfpronoun, // Местоимение
wfnumber, // Числительное
wfabbr_with_period, //
Сокращение с точкой
wfparticiple, // Причастие
wfinterjection, // Междометие
wfadverb,
// Наречие
wfparenthesis, // Вводное слово
wfconjunction, // Союз
wfparticle, // Частица
wfinterrogative // Вопросительное слово
};
dwHighWordId
и dwLowWordId - старшая и младшая половины
идентификационного номера слова.
Реально используется только dwHighWordId. Младшая
половина DwLowWordId ==
0 и зарезервирована для возможного наращивания
идентификационного номера.
Эта программа ищет по основному и
пользовательскому
словарю все статьи, объясняющие исходное слово. Если
слова нет в словаре, возвращает
wfecNotInDict. (После такого возврата можно вызывать
модуль обучения и добавить
слово в словарь пользователя).
По найденным морфологическим статьям
формируются
словарные формы исходного слова и части речи,
присваивается четырехбайтовый идентификационный
номер (Младшая половина DwLowWordId == 0).
Замечание о больших/малых буквах:
В словарной
форме капитализация устанавливается как в словаре,
независимо от капитализации исходного
слова, например для слов “Москва”, “МОСКВА” и даже
“москва” будет выдана словарная
форма “Москва”.
Замечание о работе со словами через дефис:
1
Слова с
дефисом подаются
целиком, так что вызывающая программа не должна
сама заботится о правильном
разбиении слов через дефис;
2
Если слово
с дефисом
есть в словаре целиком, то оно и обрабатывается целиком,
например, “Рио-де-Жанейро”,
“кирпично-красный”;
3
Для слов с
дефисным
написанием частиц частица отсекается и слово
обрабатывается без частицы, например,
“платить-таки”;
4
Существительные
через
дефис с обеими изменяемыми частями отсутствуют в словаре
целиком, поэтому будут
сформированы структуры HOM как для первой, так и для
второй части. Например, для
слова “женщина-врач” будут сформированы 2 структуры HOM,
одна для слова
“женщина” и вторая для слова “врач”.
5
Прилагательные
через
дефис могут отсутствовать в словаре целиком, но первая
часть может присутствовать
как краткое, а вторая как полное прилагательное. В этом
случае сформируются структуры
HOM как для отдельных частей, так и для синтезированного
слова целиком. Например,
для слова “бледно-научный” будут сформированы структуры
HOM для слов “бледный”,
“научный” и “бледно-научный”
Замечание о причастных формах:
Для глаголов синтезируются все причастия в
форме
именительного падежа мужского рода единственного числа.
Если функция используется
для индексирования текстовых баз, причастия можно не
включать в индекс.
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC, идентифицирующий проблему. Возможные
значения WFEC: wfecNone (=0
- нет ошибок), wfecNotInDictInput (нет в словаре),
wfecNotRussianWord (не русское
слово), wfecNoMainDict (основной словарь еще не
загружен),
wfecUnknown (неизвестная ошибка), wfecOOM (out of
memory).
WFEC
CWFAPI WFCommonHashCode (WFID wfid,
LPCSTR
lpszInputWord,
DWORD *dwHighWordId,
DWORD
*dwLowWordId);
wfid
- идентификатор, возвращаемый
WFInit();
lpszInputWord
- указатель на исходное слово;
dwHighWordId
- выходной параметр – хэш-код, приписываемый исходному
слову;
dwLowWordId - выходной параметр, в данный
момент
не используется.
Эта функция генерирует хэш-код для указанного
слова
вне зависимости от того, есть оно в словаре ОРФО или
нет.
Замечание
При вызове этой функции следует передавать
исходное
слово в нижнем регистре для возможности поиска слов,
отличающихся только капитализацией.
Функция
генерирует хэш-код без учета морфологии!
Т.е. все омонимы будут иметь один и тот же хэш-код.
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC, идентифицирующий проблему. Возможные
значения WFEC: wfecNone (=0
- нет ошибок), wfecUnknown
(неизвестная ошибка),
wfecOOM (out of memory).
WFEC CWFAPI WFAllForms ( WFID wfid,
LPCSTR lpszInputWord,
enum WFPOS iPartOfSpeech,
LPSTR lprgszOutputWords,
BOOL bDoFullOutput
);
wfid -
идентификатор,
возвращаемый WFInit();
lpszInputWord
- указатель на исходное слово;
iPartOfSpeech
– номер части речи;
lprgszOutputWords
- указатель на все формы слова, синтезируемые WFAllForms
(память не менее MAX_ALL_FORMS_LEN
байт заказывает и освобождает вызывающая программа).
Словоформы перечисляются через
\0. В конце списка стоит \0\0;
bDoFullOutput – режим выдачи словоформ:
bDoFullOutput
= TRUE
– выдавать все формы всех омонимов, включая повторы
форм и отсутствующие формы
bDoFullOutput =
FALSE – выдать список без повторов
и отсутствующих
форм
Эта программа ищет по основному и
пользовательскому
словарю все статьи, объясняющие исходное слово в
соответствии с специфицированной
частью речи. Если слова нет в словаре, возвращает
wfecNotInDict. (После такого возврата
можно вызывать модуль обучения и добавить слово в
словарь пользователя).
По найденным морфологическим статьям
формируются
все формы исходного слова.
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC, идентифицирующий проблему. Возможные
значения WFEC: wfecNone (=0
- нет ошибок), wfecNotInDictInput (нет в словаре),
wfecNotRussianWord (не русское
слово), wfecUncorresponded (специфицированная часть речи
не соответствует слову),
wfecNoMainDict (основной словарь еще не загружен),
wfecUnknown (неизвестная ошибка), wfecOOM (out of
memory).
WFEC
CWFAPI
WFCloseUdr (WFID
wfid);
wfid
- идентификатор, возвращаемый
WFInit();
Закрывает морфологический словарь
пользователя,
открытый WFOpenUdr () и делает его недоступным для WF.
WFCloseUdr() должна быть
вызвана до вызова WFCloseMdt() (т.е. пока открыт
основной словарь).
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC, идентифицирующий проблему. Возможные
значения WFEC: wfecNone (нет
ошибок), wfecModuleInUse, wfecNoMainDict
(словарь еще не загружен), wfecUnknown (неизвестная
ошибка).
WFEC
CWFAPI
WFCloseMdt (WFID
wfid);
wfid
- идентификатор, возвращаемый
WFInit();
Закрывает основной словарь и делает его
недоступным
для WF. Функции WF не могут быть использованы, пока
WFOpenMdt() снова не откроет
какой-либо словарь. WFCloseMdt() должна быть вызвана до
вызова WFTerminate().
Возвращает wfecNone при успехе. В противном
случае
возвращает WFEC (WF Error Code), идентифицирующий
проблему. Возможные значения WFEC:
wfecNone (=0 - нет ошибок), wfecModuleInUse, wfecUnknown
(неизвестная ошибка).
WFEC CWFAPI WFTerminate ( WFID wfid ) ;