Алфавиты в грамматическом словаре

Алфавит объединяет символы, специфичные для определенного языка.

Например, для русского языка алфавит включает символы кириллицы.

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

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

Объявление алфавита в словаре

Описание алфавита состоит из нескольких компонентов.

Во-первых, это объявление языка:

 alphabet Russian // basic cyrillic for Russian language

Объявление состоит из ключевого слова alphabet и удобного для разработчика наименования алфавита.

Во-вторых, перечень букв (символов). Буквы сгруппированы в буквостатьи (по аналогии со словарными статьями), так что разные варианты одной буквы объединяются. Например, русские буквы е, Е, ё, Ё являются буквоформами одной буквостатьи 'E'. Другой пример - буквы oOòóôöÒÓÔÖ для французского языка - они также объединены в рамках одной буквостатьи 'O'.

Каждая буквостатья приписывается к определенному классу, который объявляется отдельно. Синтаксис объявления классов буквостатей практически такой же, как и для лексикона.

Наконец, как и в словарных статьях, каждая буквостатья имеет дополнительные признаки-атрибуты, а каждая буквоформа - признаки-измерения.

Все это позволяет достаточно детально и без жесткой фиксации в архитектуре грамматического словаря определять письменность языков:

    entry Е : LETTER
    {
     alphabet Russian
     VOWELNESS: VOWEL
     SIZE { Е е }
     SIZE { Ё ё }
    }

 

    entry À : LETTER
    {
     alphabet French
     VOWELNESS : VOWEL
   
     SIZE:BIG { À }
     SIZE:SMALL { à }
    }

Кодировка символов

Сами символы, входящие в алфавит, хранятся в кодировке UCS-4, то есть представлены как 32-битные целые числа. Это обеспечивает максимальную независимость от программной платформы, на которой работает грамматический словарь.

В реляционном хранилище коды символов хранится в полях ABC_ENTRY.CODE и ABC_FORM.CODE. В этих же двух таблицах есть поля для текстового представления символов, но из-за различий в способах обработки текста в разных СУБД, в частности из-за алгоритмов сравнения текста с учетом локали, эти текстовые поля используются только для визуального контроля при отладке.

Текстовые строки, в частности текстовое содержимое словоформ, представлены как строки широких символов wchar_t. Поэтому для Windows словарь оперирует строками в кодировке utf-16, а на Linux - в кодировке ucs-4. Такой подход обеспечивает удобную отладку и безшовное сопряжение со стандартными библиотеками для каждой платформы.

Графически похожие символы и нормализация

Обычно грамматический словарь включает объявление нескольких алфавитов - кириллица, базовая латиница, отдельные алфавиты для французского, испанского языков и так далее. Это приводит к возникновению неоднозначности при отнесении многих символов к определенному алфавиту. Это прежде всего касается символов базовой латиницы, которые присутствуют во многих европейских языках.

Второй источник неоднозначности - это включение символов с диакритическими значками в ту или иную буквостатью. С понятием буквостатьи тесно связана процедура нормализации текста, которая в самом простом случае приводит символы исходной строки в верхний регистр. Нормализация используется для хранения лексем и последующего поиска их с максимальной эффективностью.

Если для примера взять кириллицу, то в ней имеется особая буквостатья Е, в рамках которой собраны 4 буквы Е, е, Ё, ё. Таким образом, буква ё в ходе нормализации теряется, и все русские слова в лексиконе хранятся без ёфикации. Для восстановления буквы ё используется другой механизм - дополнительная информация для грамматических форм, хранящаяся в базе данных в таблицах AUX_ENTRY_DATA и AUX_FORM.

Если мы теперь рассмотрим латиницу с диакритическими значками, то увидим более сложную картину. Для иллюстрации сделаем запрос к SQL словарю:

SELECT F.name AS "буква", E.name AS "буквостатья", E.code AS "ucs4", A.name AS "алфавит"
FROM abc_form F, abc_entry E, abc_alphabet A WHERE F.code=224 AND E.id=F.id_entry AND A.id=E.id_alphabet

Он выводит буквостатьи, в состав которых на правах одной из буквоформ входит символ à:

диакритика

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

Например, в английском словаре нормализация tête-à-tête даст TETE-A-TETE, то есть незначащие для английской фонетики тонкости французской орфографии будут отброшены.

Но для французского языка диакритические знаки важны, так как есть слова, отличающиеся только в пределах акцентов. Поэтому символы с диакритическими значками, а также без них включены в разные буквостатьи, и нормализация даст другой результат: TÊTE-À-TÊTE.

Так как нормализация текста выполняется без учета системной локали, то сборка грамматического словаря дает одинаковые результаты вне зависимости от текущих языковых настроек среды.

Общие пунктуаторы и арабские цифры

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

Кириллица для русского языка

Объявлен только набор букв, используемых в современном русском языке после реформы 1917 года, включая ё. Буквы, употреблявшиеся в рамках старой орфографии, могут быть внесены в алфавит при необходимости обработки старых текстов, но для обычных задач в этом нет необходимости.

Буква ё объявлена не как отдельная буквостатья, а как буквоформа - вариант написания буквы Е. Таким образом, русский алфавит включает в себя 32 буквостатьи, объединяющие 66 букв. Иногда в текстах встречается употребление букв со значком ударения, например чтобы уточнить употребление слова при наличии вариантов с разными ударениями: по́ра-пора́. Такие буквы с диакритиками не включены в кириллицу, хотя и используются программой Грамматический Словарь Русского Языка при выводе информации о словарных статьях.

Все буквы русского алфавита разделены на 4 группы.

Согласные

Самая многочисленная группа, в нею входят Б В Г Д Ж З К Л М Н П Р С Т Ф Х Ц Ч Ш Щ. Палатизация некоторых согласных приводит к увеличению количества вариантов, но они не отражаются алфавитом.

Гласные

Десять букв, соответствующие пяти гласным фонемам э-е, а-я, о-ё, у-ю, ы-и. Наличие таких пар объясняется тем, что в русском языке нет другого способа обозначить мягкость согласных, за исключением еще варианта с твердым и мягким знаками.

Полугласные

Представлена единственная буква Й.

Знаки

В эту группу входят две буквы - ъ и ь, твердый и мягкий знак соответственно. Эти буквы не соответствуют никаким фонемам, но несут на письме несколько функций.

Обозначение мягкости предыдущего согласного киль, вязь (сравни вяз).

Обозначение йотированной гласной пьём (сравни днём), подъём.

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

Объявление русского алфавита можно посмотреть в исходных текстах словаря в файле russian_alphabet.sol.

Латиница в английском, французском, испанском языках

Базовая латиница содержит буквы современного английского языка.

Вышедшие из употребления буквы древнеанглийского языка, например торн þ, не включены в английский алфавит.

Дополнительные символы с диакритическими значками, применяемые в испанском, французском языках, содержатся в соответствующих алфавитах. Аналогичным образом отдельно описан немецкий алфавит с дополнительными символами - символы с умляутами и лигатура ß.

Большие и малые буквы

Большие и малые буквы объявлены в алфавитах как варианты написания - буквоформы - для соответствующих буквостатей. Таким образом, лексикон считает большие и малые буквы полностью равнозначными и не хранит соответствующую информацию. Соответствующий процесс нормализации был описан на этой странице ранее и основан на замене букв на базовый вариант написания - название буквостатьи. В подавляющем большинстве случаев это приводит к приведению текста к верхнему регистру.

Написание слов с точностью до регистра регулируется другим способом - через специальный тег в словарных статьях. Большинство словарных статей соответствуют словам, которые пишутся малыми буквами, за исключением первого слова в предложении либо специального "телеграфного" письма. Координата CharCasing, объявленная в исходных текстах в файле sg_main.sol, позволяет задать для слова и его форм вариант написания из следующего списка:

Upper - все большие, используется для акронимов ООН, СССР, США

FirstCapitalized - первая буква большая, остальные малые, обычно в именах собственных Роза (женское имя)

EachLexemCapitalized - для многословных статей, каждая лексема с большой буквы Нижний Новгород, New-York.

SQL словарь хранит два варианта написания каждого слова и фразы - нормализованный и с правильным регистром. Это можно увидеть на фрагменте выборки для запроса:

SELECT id, name, uname
 FROM  sg_entry
 WHERE uname LIKE 'НЬ%'

Он дает такой результат:

idnameuname
1074044022Нью-ЙоркНЬЮ - ЙОРК
1073957659ньюйоркскийНЬЮЙОРКСКИЙ
1074050657ньютонНЬЮТОН
1073958385ньютоновскийНЬЮТОНОВСКИЙ
1074051806НьюфаундлендНЬЮФАУНДЛЕНД
1073957230ньюфаундлендскийНЬЮФАУНДЛЕНДСКИЙ

В процедурном API есть специальная функция sol_RestoreCasing, которая позволяет привести слово к правильному написанию.

Кандзи, хирагана и катакана в японском языке

Вообще говоря, нельзя применять термин алфавит применительно к японской письменности, которая включает в себя иероглифическую и слоговую части - кандзи и кана. Однако для описания в рамках грамматического словаря это удобно.

Иероглифы - кандзи, а также обе слоговые азбуки - хирагана и катакана - перечислены в японском "алфавите". Разумеется, набор включенных иероглифов не полон, хотя и достаточно обширен. Символы каны включены полностью.

Обратите внимание, что японский алфавит включает в себя также набор дополнительных символов - моноширинную латиницу, кириллицу и знаки пунктуации. Эти символы выглядят почти как обычные буквы латиницы и кириллицы, но имеют другие коды в пространстве Юникода:

0  1 2  3  4  5  ...  A  B  C  D  E

Кроме того, дополнительные символы включают специфические японские пунктуаторы 、 и 。.

Дополнительные материалы

Языки

Словарные статьи

Словарь

Внутренний формат описания грамматического словаря

Реляционное представление алфавитов в SQL словаре

Статистика буквенных паттернов в русском лексиконе

Alphabets

Поиск и восстановление слов с буквой ё в SQL словаре

  © Elijah Koziev 2010
прикладные проекты на основе грамматического словаря API грамматической машины компоненты для доступа к грамматическому словарю условия получения SDK токенизатор и сегментатор морфологический анализ и синтез лемматизатор база N-грамм синтаксический анализатор словоформы морфология и синтаксис русского языка падеж число род совершенный и несовершенный вид экспорт в SQL формат экспорт в XML формат скрипт SQL словаря структура SQL словаря структура XML словаря компоненты для доступа к грамматическому словарю ORM Persistent Dictionary Library лемматизация стемминг примеры использования грамматического словаря склонение существительных в русском языке склонение русских прилагательных спряжение глаголов в русском языке поиск текста с учетом морфологии OCR подсистема расширенные регулярные выражения генератор текста генератор случайного текста и имитатор рандомизатор синонимизатор перефразировщик Статистика буквенных паттернов

Грамматический словарь русского языка



Грамматический словарь
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
требования: 512 Mb свободной памяти, 300 Мб на диске
размер:         34 Мб

  скачать грамматический словарь купить грамматический словарь SDK грамматического словаря
грамматический словарь русского языка



SDK Грамматического словаря



SDK Грамматического Словаря
склонение и спряжение глаголов, существительных, прилагательных

В состав входит русский и английский словарь.

платформа:  Windows 2000 ... Windows 7
размер:         13 Мб

SQL словарь (демо):
sqlite mysql oracle firebird mssql

скачать демо-версию SDK купить SDK API грамматического словаря



Поисковая система



Integra
настольная и сетевая поисковая система 

платформа:  Windows XP ... Windows 7
требования: 512 Mb свободной памяти
размер:         21 Мб

Дополнительные компоненты:
MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать поисковую систему SDK поисковой системыописание поисковой системы



SDK Поисковой системы



SDK Поискового движка
API для настольной и сетевой поисковая система 

платформа:  Windows XP ... Windows 7
размер:         17 Мб

Дополнительные компоненты:

MySQL поисковый сервер 13.5 Мб
Integra.Premium MySQL 3.9 Мб

скачать SDK SDK поисковой системы



Экранный переводчик



Translator
экранный переводчик

платформа:  Windows XP ... Windows 7
требования: 256 Mb свободной памяти
размер:         4.4 Мб

Дополнительные компоненты:
расширенный англо-русский словарь 6.4 Мб


скачать экранный переводчикописание экранного переводчика



изменено 14-Feb-12