Использование LINQ для работы со словарем

Создание SQL словаря в реляционной СУБД

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

Для дальнешей работы с технологией LINQ нам понадобится загруженный в MS SQL словарь. На странице загрузокесть бесплатные демо-скрипты для некоторых типов СУБД, в том числе для MS SQL. Используйте его для начальных экспериментов. Этот скрипт создает практически полную схему словаря, но содержит минимальное количество словарных статей и связей тезауруса.

Приступая к работе со словарем с помощью Linq 2 Sql

Готовый демонстрационный проект, в котором показано использование возможностей языка C# для работы со словарем, входит в состав SDK Грамматического Словаря.

Чтобы самостоятельно начать работу, необходимо создать в VS 2008 новый проект C# для Windows (консольное приложение).

Затем добавляем в проект новый элемент, выбирая в диалоговом окне "LINQ 2 SQL":

LINQ

Удобно задать имя элемента так, как показано на скриншоте - с большой буквы, чтобы сгенерированный код выглядел более прилично.

Далее настраиваем в Студии новое соединение с сервером SQL, куда мы загрузили словарь, на боковой вкладке "Server Toolbox", и перетаскиваем таблицы словаря в окно дизайнера (там будет соответствющая надпись, предлагающая добавить таблицы).

Сохранив сгенерированную схему, мы получим набор классов, которые однозначно соответствуют таблицам словаря. Обратите внимание, что генератор кода при создании контекста доступа добавляет к именам таблиц окончания множественного числа в соответствии с правилами английского языка, поэтому таблица sg_entry представлена массивом объектов с именем sg_entries, таблица sg_class - массивом sg_classes, и так далее.

Собственно на этом подготовка закончена. В нашем распоряжении имеется объектное отображение для реляционной схемы словаря - именно для этого необходимы средства ORM, в нашем случае - доступная "из коробки" Entity Framework. Каждая таблица отображена на C#-класс, с дополнительными свойствами для зависимостей, которые генератор схемы взял из foreign keys таблиц словаря.

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

Обычный императивный подход

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

Entity Framework

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

Например, небольшая модификация задачи - перебор словарных статей в алфавитном порядке - резко усложняет изначально тривиальный алгоритм, так как сначала надо где-то отсортировать данные. Более того, если словарь большой, например русский словарь содержит более ста тысяч словарных статей, то выборка данных для сортировки займет немало времени и ресурсов. Обратите внимание, что данные фактически хранятся в БД и загружаются в оперативную память по мере создания соответствующих объектов. Этим занимается Entity Framework. Будет разумно переложить сортировку на SQL сервер, он это умеет делать очень хорошо. Драйвер LINQ 2 SQL как раз занимается тем, что транслирует манипуляции к массивами ORM объектов в SQL команды для сервера.

LINQ запросы к словарю

Упомянутый ранее LINQ запрос для вывода списка словарных статей с сортировкой по именам выглядит так:

Linq 2 Sql

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

LINQ

Каждая словарная статья привязана к определенной части речи - к грамматическому классу. В свою очередь каждый грамматический класс привязан к языку. Можно вывести список имен словарных статей с дополнительными полями - какая это часть речи:

LINQ

С дополнительным стобцом "к какому языку принадлежит":

LINQ

Предыдущий запрос можно удлинить, добавив фильтр русского языка и заодно отсортировав результаты фильтрации по длине слова:

LINQ

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

SQL запросы к словарю

Экспорт словаря в SQL формат

ORM библиотека Persistent Dictionary

  © 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-Jul-12