Для получения XML файла с данными словаря, используется утилита
decompiler. В качестве источника она использует скомпилированный бинарный
словарь. Все необходимые компоненты есть в составе полного SDK
грамматического словаря, для приобретения которого необходимо связаться с разработчиками.
Структура таблиц class, entry и entry_form следующая.
Таблица class: id - ключ записи, name - имя класса, присвоенное ему при объявлении в исходных текстах словаря.
Таблица entry: id - ключ статьи, id_class - код грамматического класса (внешний ключ на class.id), name - имя статьи (обычно это базовая грамматическая форма), entry_attrs - список атрибутов словарной статьи - грамматических признаков, присущих всем грамматическим формам данного слова, например род и одушевленность для русских существительных.
Таблица entry_form: id_entry - код словарной статьи (внешний ключ на entry.id), name - текстовое представление грамматической формы, iform - порядковый номер формы в рамках словарной статьи, form_dims - список измерений, например - падеж и грамматическое число для форм существительного.
Общий вид структуры:

Работать с содержимым словаря, экспортированным в XML формат, можно с помощью СУБД,
которая поддерживает загрузку данных из XML файлов. Хорошо работает MS Access
2003, при этом не требуя дополнительных инструментов.
Общая технология такая. Создается пустая БД. В нее импортируются данные из файла 'lexicon.xml'. При этом Access самостоятельно прочитает также описание схемы из lexicon.xsd. В результате в БД будет создано несколько таблиц (class, entry и entry_form).
Теперь можно применять средства SQL для выборки данных по разным критериям, и с помощью инструментария СУБД Access строить разнообразные отчеты. Вы даже можете использовать прекрасный штатный генератор отчетов Access'а, если хотите получать результаты в виде красивых диаграмм. Мы же ограничимся текстовыми результатами исполнения запросов.
Для понимания дальнейшего изложения необходимо знать язык SQL.
Например, запрос:
SELECT C.name, Count(E.id)
FROM Class AS C, Entry AS E
WHERE C.id=E.id_class
GROUP BY C.name
ORDER BY Count(E.id) DESC;
выдаст число словарных статей в каждом грамматическом
классе:
СУЩЕСТВИТЕЛЬНОЕ |
8943 |
ИНФИНИТИВ |
8270 |
ПРИЛАГАТЕЛЬНОЕ |
6761 |
ПРЕДИКАТ |
2884 |
НАРЕЧИЕ |
2288 |
ДЕЕПРИЧАСТИЕ |
655 |
ПРЕДЛОГ |
98 |
ЧАСТИЦА |
97 |
МУСОР |
92 |
СОЮЗ |
73 |
Sound_Resource |
5555 |
ВВОДНОЕ |
48 |
ЧИСЛИТЕЛЬНОЕ |
38 |
ПРИЧАСТИЕ |
35 |
ПУНКТУАТОР |
33 |
БЕЗЛИЧ_ГЛАГОЛ |
24 |
МЕСТОИМ_СУЩ |
13 |
СПЕЦ |
12 |
beth |
9 |
ЛОГСОЮЗ |
5 |
МЕСТОИМЕНИЕ |
4 |
types |
4 |
num_word |
3 |
ВОСКЛ_ГЛАГОЛ |
2 |
QUANTOR |
2 |
DUMMY |
2 |
ADJ |
1 |
МОДАЛЬНОЕ |
1 |
VERB |
1 |
NOUN |
1>1 |
Чтобы узнать число словарных форм в каждом из классов, требуется минимальная модификация запроса:
SELECT C.name, Count(F.name)
FROM Class AS C, Entry AS E, Entry_form AS F
WHERE C.id=E.id_class AND F.id_entry=E.id
GROUP BY C.name
HAVING Count(F.name) > 50
ORDER BY Count(F.name) DESC;
В этом запросе попутно производится отсечение малозначимых данных (классов с числом словоформ менее 50). Результат:
ПРИЛАГАТЕЛЬНОЕ |
722510 |
СУЩЕСТВИТЕЛЬНОЕ |
108690 |
ПРЕДИКАТ |
34625 |
ИНФИНИТИВ |
8270 |
ПРИЧАСТИЕ |
2466 |
НАРЕЧИЕ |
2288 |
ДЕЕПРИЧАСТИЕ |
655 |
ЧИСЛИТЕЛЬНОЕ |
586 |
МЕСТОИМЕНИЕ |
139 |
ПРЕДЛОГ |
98 |
ЧАСТИЦА |
97 |
МУСОР |
92 |
МЕСТОИМ_СУЩ |
83 |
СОЮЗ |
73 |
Sound_Resource |
55 |
В действительности, средства языка SQL позволяют очень легко проводить достаточно сложную выборку данных, причем делать это в интерактивном режиме. Например, нас интересуют все слова с длиной = 15 букв, начинающиеся с 'мак':
SELECT F.name
FROM Entry_Form F
WHERE Len( F.name )=15 AND Left( F.name, 3 )='МАК';
Тут же получаем:
МАКСИМАЛЬНЕЙШИЙ |
МАКСИМАЛЬНЕЙШАЯ |
МАКСИМАЛЬНЕЙШЕЕ |
МАКСИМАЛЬНЕЙШИЕ |
МАКСИМАЛЬНЕЙШЕЙ |
МАКСИМАЛЬНЕЙШИХ |
МАКСИМАЛЬНЕЙШИМ |
МАКСИМАЛЬНЕЙШЕЙ |
МАКСИМАЛЬНЕЙШИМ |
МАКСИМАЛЬНЕЙШЕЮ |
МАКСИМАЛЬНЕЙШИЙ |
МАКСИМАЛЬНЕЙШУЮ |
МАКСИМАЛЬНЕЙШЕЕ |
МАКСИМАЛЬНЕЙШИХ |
МАКСИМАЛЬНЕЙШЕЙ |
МАКСИМАЛЬНЕЙШИМ |
МАКСИМАЛЬНЕЙШЕМ |
МАКСИМАЛЬНЕЙШЕЙ |
МАКСИМАЛЬНЕЙШЕМ |
МАКСИМАЛЬНЕЙШИХ |
Экспорт словаря из бинарного формата в SQL
© Elijah Koziev 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 16-Aug-11 | ||||||||||||||||||||||||||||||||||||||