Компилятор грамматического словаря

Транслятор словаря

Компиляция в командной строке

Макросы для компиляции в других IDE

Компиляция в IDE Borland C++ Builder

Компиляция в IDE MS VisualStudio

Компиляция с Intel C++ 9.0

Использование

Транслятор словаря поискового движка

На этом этапе создается компилятор с языка ПРИИСК, с помощью которого описывается словарь (лексикон и тезаурус), правила грамматического анализа и синтеза, а также правила трансформации. Трансляция текстового описания словаря во внутреннее представление позволяет ускорить поиск слов в лексиконе за счет предварительного построения специальных ускорительных таблиц (и даже генерации C++ кода, который компилируется в других модулях и реализует ускоренный поиск наиболее употребительных слов по лексикону) и повысить эффективность синтаксического анализа за счет перевода очень удобных для программиста, но крайне неэффективных продукционных правил (если A B C то d B f) в эквивалентный C++ код. Благодаря такому подходу часть словаря в итоге транслируется в машинный код, а C++ компилятор используется как мощный, платформонезависимый ассемблер.

Исходные тексты утилиты находятся в каталоге \LEM\Demo\AI\Solarix\Ygres\Compiler, там же находятся проекты для компиляции для разных платформ и компиляторов. Исходные тексты могут компилироваться "as is" - они не требуют никакой обработки и настройки. Мы проверяли компиляцию в MS VisualStudio 6.0, 2003, 2005, Intel Compiler 9.0, Borland C Builder 6.0 под MS Windows, GCC 3.4.3 под Linux, GCC 3.4.4 под FreeBSD 6.1.

Необходимые библиотеки

Для компиляции необходима только библиотека Boost в исходных кодах. Возможно, Вам потребуется скорректировать некоторые переменные окружения, указывающие на расположение boost'а.

Компиляция в командной строке

Для компиляции можно использовать файл проекта для CBuilder 6.0 compiler.bpr (см. здесь) или для MS VisualStudio 2003 (см. здесь). Компиляция средствами IDE может оказаться намного менее эффективна, чем работа в командной строке. Для компиляции утилиты из исходных текстов в командной строке можно использовать 2 подхода - утилита MAK и стандартная утилита make.

Компиляция с помощью 'мета-make' утилиты MAK

Во-первых, можно применять утилиту MAK - файл проекта для нее называется makefile.

В окне командной строки набирайте:

для компиляции посредством C Builder 6.0 - tc56 <ENTER>

для компиляции посредством MS Visual Studio.NET 2003 - vs2003 <ENTER>

Эти bat-файлы настраивают переменные окружения (см. подробнее здесь).

Если Вы работаете в Linux, то настройка на GCC должна быть уже выполнена.

Перед компиляцией скорректируйте путь к каталогу для объектных файлов - в файле makefile это переменная objdir. Мы в работе используем вариант с каталогом e:\tmp\ygres, где e:\tmp - значение переменной окружения OBJS. Для Linux'а временные файлы будут сбрасываться в /tmp/ygres. Подкаталог ygres надо создать самостоятельно руками.

Итак, набираете в командной строке:

mak

Через некоторое время (на машине P-IV 2.8GHz это несколько минут для компиляции в Windows и пару десятов минут компиляции в Linux) будет создан файл ygres.exe.

Теперь можно приступать к компиляции Словаря с помощью созданного ygres.exe.

Компиляция с помощью стандартной утилиты make

Во-вторых, начиная с релиза версии 3.2, можно использовать стандартную юниксовую утилиту make.

Запуск компиляции выполняется командой

make

 Запуск

make clean

очищает промежуточные результаты предыдущей компиляции.

Скрипты настроены так, что для Linux битность создаваемого бинарного файла соответствует битности ОС. Для Mac OS X (Darwin) собирается 32-битный исполнимый модуль вне зависимости от битности ОС, чтобы результаты компиляции словаря были совместимы с графическими приложениями типа Настольного Переводчика, которые собираются с помощью Qt.

Макросы для компиляции в других IDE

Вообще говоря, самостоятельно скомпилировать программу в предпочитаемой Вами IDE нетрудно. Единственный существенный момент: для компиляция каждого файла должна выполнятся с определенными макросами:

SOL_LOADTXT
LEM_DEBUGGING=0
SOL_SAVETXT
LEM_CONSOLE
SOL_COMPILER
 

Если для библиотеки BOOST не используются предварительно построенные lib-модули, а в проект включены исходные тексты нужных библиотеки (мы делаем именно так), то не забудьте определить макрос BOOST_ALL_NO_LIB.

Готовые скомпилированные файлы входят в состав SDK.

Компиляция в IDE Borland C++ Builder

Используйте проект LEM\Demo\AI\Solarix\Ygres\Compiler\compiler.bpr. И приготовьтесь к очень длительному ожиданию - этот компилятор плохо переваривает большие проекты и использование шаблонов (VisualStudio 2003 работает почти на порядок - то есть в 10 раз) быстрее, при этом нагрузку на процессор этот компилятор создает потрясающую.

К большому сожалению, из-за явного наличия ошибок оптимизатора не удается даже скомпилировать проект под C++ Builder'ом при полностью задействованной оптимизации (возникают ошибки компиляции в местах, где никаких ошибок быть не может). Поэтому результаты прогонов в разделе бенчмарков приведены для успешно скомпилированного исполнимого модуля с максимально возможной оптимизацией. Как вы можете убедиться, результаты мягко говоря не впечатляют.

Кроме всего вышеперечисленного, создаваемый исполнимый модуль достаточно велик - поэтому C++ Builder оказывается явным аутсайдером среди опробованных компиляторов по совокупности результатов (если не считать MinGW, который вообще отказался компилировать некоторые части BOOST C++). Единственное, что выгодно отличает эту среду разработки - возможность при компиляции задать параметр генерации особого проверочного кода для работы с указателями (Safe Guard). Хотя скорость работы кода после этого падает в несколько раз, но некоторые фатальные ошибки (повторное освобождение указателя, затирание чужих областей памяти) и грязь в коде (утечка памяти) обнаруживаются автоматически. Остальные среды разработки лишены, к сожалению, такого простого и мощного средства отладки (имеющийся в MS VisualStudio механизм buffer overflow check и близко не лежит по своим возможностям).

Сразу заметим, что если Вы будете использовать откомпилированный в C++ Builder'е модуль ygres, то создаваемый файл словаря будет нормально загружаться другими программами проекта, включая поисковый движок, в рамках одной платформы.

Компиляция в IDE MS VisualStudio

Возможно использовать версии 6.0, 2003 и 2005 Студии.

Для MS VC 6.0 готовый проект - файл LEM\Demo\AI\Solarix\Ygres\Compiler\ygres_msvc60\ygres_mcvs60.dsw.

Для компиляции в IDE MSVC 2003 и 2005 используйте проект LEM\Demo\AI\Solarix\Ygres\Compiler\ygres_msvc2003\ygres_compiler.sln. Обратите внимание на настройку путей в проекте к хидерам. Перед компиляцией определитесь и задайте в опциях проекта, какую версию - отладочную или релизную - будете создавать.

Для компиляции любых программ проекта рекомендуется иметь не менее 512 Мб оперативной памяти. Оптимальным будет наличие 1 Гб, так как линкер студии при создании релиза временами забирает до 600-700 Мб для загрузки всех объектных модулей для оптимизации.

По совокупности качеств Студия является оптимальным средством разработки в рамках проекта. Можно отметить очень высокое качество оптимизатора (для справки смотрите результаты тестовых прогонов в разделе бенчмарков), безошибочную компиляцию последних версий Boost C++, а также лучшую среди опробованных компиляторов работу линкера. При включенном режиме линковки отдельных функций среда безошибочно удаляет из исполнимого кода мертвые куски, что приводит к радикальному уменьшению размера создаваемого файла. По размеру порождаемого кода VisualStudio не просто обогнала остальные компиляторы, а находится в недосягаемой для них зоне.

Компиляция с Intel C++ 9.0

Мы испытывали компиляцию с интегрированным в MS VisualStudio 2003 компилятором Intel C++ 9.0. Сразу следует отметить, что не стоит пытаться компилировать программы из состава проекта при наличии даже 1 Гб оперативной памяти - на стадии линковки Вы скорее всего получите сообщение об ошибке выделения памяти. Дело в том, что линкер данного транслятора выполняет ряд межмодульных оптимизаций, для которых он явно загружает в оперативную память все содержимое объектных файлов. Так что приготовьтесь к расширению оперативной памяти до 2 Гб - этого объема по результатам экспериментов хватает для нормальной трансляции в Intel C++ 9.0.

Время компиляции примерно соответствует времени для MSVS 2003. А вот фаза линковки значительно тяжелее не только в плане требуемых ресурсов памяти, но и по времени. Поэтому данный компилятор вероятно разумнее всего использовать для заключительной стадии подготовки релиза, когда код уже отлажен.

Размер порождаемого исполнимого кода очень велик - в несколько раз больше, чем результат  работы MSVC 2003. Видимо, какую-то долю ответственности за распухание кода следует возложить на более интенсивное применение loop unrolling.

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

Результаты тестовых прогонов можно посмотреть в разделе бенчмарков.

Использование

После успешной компиляции программы можно приступать к компиляции словаря поискового движка.

  © 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 Мб


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



изменено 01-Jul-10