Смарт-теги в Microsoft Office фирменного и кустарного приготовления
Использование XML-распознавателей
Почти то же самое, но в Office 2000
Технология Smart Tags (или просто смарт-теги) — это одна из изюминок нового пакета Office XP. Судя по всему, Microsoft делает серьезную ставку на это новшество: демонстрации данной технологии было уделено большое внимание, в том числе и на прошедшей в середине сентября презентации русской версии пакета.
Скажу сразу, я пока не очень понимаю революционности технологии Smart Tags. Никто не спорит: повышение интеллектуальности средств обработки текста — вещь полезная. Но если посмотреть на примеры применения Smart Tags (в публикациях, на презентациях), приходишь к мысли, что все они могут быть довольно легко реализованы средствами уже имеющихся офисных приложений, начиная с версии 97. Впрочем, сразу оговорюсь: возможно, пока мне доводилось видеть лишь весьма примитивные примеры. Вполне вероятно, что при изучении тонкостей новой технологии мы действительно сможем обнаружить нечто принципиально новое. Тем более что после версии 1.0 скорее всего появятся расширенные варианты с качественно новой функциональностью.
В этой статье мы рассмотрим общие принципы применения технологии, а также разработку простейших собственных смарт-тегов в Office XP. А чтобы пользователи Office 97/2000 не очень переживали по поводу отсутствия у них нового офисного пакета, покажем, как примерно то же самое можно сделать в среде имеющихся у них средств.
Как все это работает
Механизм смарт-тегов реализован в Word 2002 и Excel 2002 (отдельные приложения Office XP имеют номер версии 2002), а также в новой версии Internet Explorer 6.0, но только если на ПК установлен Office XP. Он также доступен в Outlook 2002, если для ввода HTML-текста применяется тот же Word 2002 (в нем предусмотрен такой режим). Применение технологии Smart Tags выглядит примерно так.
На жесткий диск записываются одна или несколько специальных программ-распознавателей (recognizer), которые после регистрации становятся доступными для приложений, поддерживающих данную технологию.
Каждый распознаватель содержит набор терминов (лексем) и присоединенных к нему (именно ко всему набору, а не к отдельному термину) функций. В настоящее время имеется два варианта создания распознавателей:
- В виде XML-файлов, которые могут быть созданы с помощью простейшего текстового редактора. Их регистрация выполняется простой записью файлов в каталог C:\Program Files\Common Files\Microsoft Shared\Smart Tag\Lists (он создается при установке Office XP). Именно создание этого варианта распознавателей мы рассмотрим в этой статье.
- В виде ActiveX DLL с использованием библиотеки типов Microsoft Smart Tags 1.0, входящей в состав Office XP. Регистрация в этом случае выполняется через cистемный реестр.
Первый вариант распознавателей создается очень просто, но функции обработки в основном ограничены ссылками на Web-ресурсы. Второй реализуется несколько сложнее и требует некоторых навыков программирования и средства типа VB 6.0. Разработчик же в этом случае может реализовать функции обработки любой сложности. Для разработки распознавателей (и изучения тонкостей самой технологии) пригодится набор Smart Tag SDK 1.1 (рис. 1), который можно свободно считать по адресу http://msdn/microsoft.com/office.
Word и Excel «умеют» определять состав подключенных к нему модулей-распознавалей (о подобной функции в Internet Explorer 6.0 пока ничего не известно) из списка тех, что зарегистрированы на данном компьютере. Это делается с помощью вкладки Tools | AutoCorrect options | Smart Tags (Сервис | Параметры автозамены | Смарт-теги). В состав поставки Office XP входят несколько стандартных распознавателей — имен людей, телефонов, адресов и пр., но они работают только для английского языка (рис. 2). Все они реализованы в виде DLL. В нижней строке окна «Распознаватели» имеется строка «Списки смарт-тегов» — это наборы распознавателей, представленные XML-описаниями (пока эта позиция пустая, в составе Office XP распознавателей такого типа нет).
В диалоговом окне «Смарт-теги» имеются также флажки управления режимами работы: «Добавить смарт-теги к тексту» — включает/выключает режим применения смарт-тегов, «Показать действие кнопки» — включает/выключает поддержку контекстного меню. А отключение выделения смарт-тегов путем подчеркивания осуществляется с помощью флажка «Смарт-теги» в области «Показывать» во вкладке «Сервис | Параметры | Вид». В нижней части окна находятся кнопки выполнения операций: «Удалить» — убирает все смарт-теги документа, а «Проверка» — восстанавливает их с учетом текущей конфигурации.
При загрузке документа (или в ходе его коррекции) приложение выполняет анализ содержимого данного фрагмента на наличие терминов, заданных в подключенных распознавателях. Найденные распознавателем термины помечаются как лексемы (одному термину могут соответствовать несколько распознавателей) и на экране подчеркивается фиолетовой пунктирной линией. Если к такому слову подвести курсор мыши, то появится кнопка Smart Tag Actions («Действия для смарт-тегов»), после щелчка по которой выводится меню с перечнем доступных операций (рис. 3).
В заголовке меню указано имя распознавателя (в данном случае «Имя»), который среагировал на это слово (Bill Gates). Две нижние строки меню представляют собой стандартные служебные операции («Удалить смарт-тег» и «Параметры смарт-тегов»), а выше располагаются команды, предлагаемые распознавателем («Отправить», «Запланировать собрание» и пр.). Выбрав нужную команду меню, вы можете инициировать некоторые действия из предлагаемого списка.
Вот, собственно, и вся логика работы технологии в ее простейшем варианте.
Использование XML-распознавателей
Как мы уже говорили, в состав поставки Office XP не входят распознаватели данного типа (в английской документации они называются Smart Tag List Definition Files). Но мы можем легко сделать такой файл, например с названием MedTerms.XML, взяв в качестве примера код, приведенный в Smart Tag SDK 1.1 (листинг 1), с описанием медицинских терминов. Запишем этот файл в каталог C:\Program Files\Common Files\Microsoft Shared\Smart Tag\Lists. Теперь после перезапуска Word 2002 в окне «Автозамена | Смарт-теги» (рис. 4) мы увидим, что строка «Списки смарт-тегов» пополнилась описанием нашего файла — Medical Condition Terms.
Установим флажок этой строки. Теперь введем текст, который содержит термины, перечисленные в XML-теге <FL:terms>, например allergy (аллергия), и убедимся, что наш обработчик смарт-тегов работает исправно (рис. 5).
Подробное описание синтаксиса XML-описания обработчика смарт-тегов приведен в Smart Tag SDK (основной набор элементов приведен в таблице). Отметим, что вспомогательные элементы позволяют выполнять автоматическое обновление списка элементов, а также обеспечивает возможность ссылки на XML-описание, хранящееся на удаленном сервере (в том числе Web-сервере). Сам обработчик описывается в элементе <FL:smarttag>, который должен содержать оригинальное имя смарт-тега в формате «пространство имен Uniform Resource Indefier#имя смарт-тега» (namespaceURI#tagname). Список терминов описывается в элементе <termlist> (единственном в файле). Набор терминов можно также считывать из двоичного файла с помощью элемента <FL:termfile>. Элементы <FL:action> описывают пользовательские операции по обработке смарт-тега: имя позиции меню (caption) и URL-ссылку для выполнения действий.
Те, кто не хочет вводить XML-код вручную, могут использовать простенькие программные средства для автоматической генерации файлов. Этому посвящена статья «Advanced Smart Tags Tools», опубликованная в библиотеке раздела http://msdn.microsoft.com/office. В ней рассказывается о трех инструментах под общим названием Microsoft Office Smart Tag List Tools (MOSTL): Smart Tag MOSTL Generator для автоматической генерации кода, Smart Tag List Builder с функциями обновления файлов, а также инструментов TestTrie и MakeTrie для создания файлов с терминами двоичного формата. Все эти программы можно скачать вместе со статьей (они распространяются свободно).
MOSTL Generator реализован в виде XLT-шаблона и представляет собой типичное приложение, реализованное в среде Excel. Обязательно ознакомьтесь с ним (и со упомянутой выше статьей), так как это — очень удачный и простой пример разработки с использованием электронных таблиц и MS XML Parser 3.0. Создать подобный генератор (в том числе в среде VB) сможет за пару часов любой программист с минимальным опытом работы.
Мы воспользуемся генератором для создания собственного XML-файла. На рис. 6 приведен диалоговый интерфейс генератора с нашими данными, где хорошо видно, что XML-распознаватель состоит из трех частей: общие сведения, описание действий и список терминов. (Генератор реализует не все возможные теги — только самые необходимые для работы. Другие инструменты применяют расширенный состав тегов.)
Код, который у нас получился с помощью генератора, приведен на листинге 2. Мы использовали термины на русском языке, что вполне допустимо, так как генератор сохраняет XML-файл в кодировке Unicode, о чем говорит заглавная строка:
<?xml version=«1.0» encoding=«UTF-16» ?>
Можно также использовать кодировку Windows-1251 при работе с русско-английским алфавитом, и при этом файл можно сохранять в обычном однобайтовом ANSI-формате.
Посмотрим, как будет работать технология Smart Tags с русскими буквами (рис. 7).
Здесь есть проблема: английские термины выделены без различия строчных и прописных букв (см. Basic и basic), а для «Фортран» — выделена только точная его копия. Слова «фортран» и тем более «Фортраном» осталось нераспознанным. Кроме того, на примере слова «vba» виден конфликт между выделением смарт-тегов и грамматических ошибок — два вида подчеркивания наложились друг на друга (режим распознавания смарт-тегов автоматически включает проверку грамматики).
А что же будет, если один и тот же термин определен в двух распознавателях? Эта ситуация приведена на рис. 7 для слова «Бейсик». В этом случае при обращении к кнопке «Действия для смарт-тегов» выдается комбинированное меню с возможностью выбора нужного обработчика (рис. 8).
Почти то же самое, но в Office 2000
А теперь, как и было обещано, о том, как можно нечто подобное сделать средствами Word 2000 (или 97), которым недоступна технология Smart Tags.
Для этого напишем макрокоманду MySmartTags (листинг 3). Из кода видно, что она обращается к форме UserForm1, которая содержит метку Label1 (для вывода найденного термина) и два списка. ListBox1 используется в качестве меню при выборе операции, а во втором хранится описание выполняемых действий (URL), поэтому мы описали его как «невидимый» (ListBox1.Visible=False). Для выполнения операции напишем код для событий ListBox1_DblClick (листинг 4). Для удобного обращения к макрокоманде поместим с помощью окна Customize кнопку ее вызова на панель меню. Вот и все, теперь посмотрим, как это будет работать.
Введем некий текст, выделим в нем двойным щелчком мыши слово «фортраном», затем щелкнем команду MySmartTags. Появится форма со списком предлагаемых действий (рис. 9).
Дважды щелкните по нужной позиции и убедитесь, что началось выполнение соответствующей операции (рис. 10).
Обратите внимание: вся эта обработка выполняется на основе данных, хранимых в ранее сформированных XML-описателях — именно в тех, что применялись выше в рамках технологии Smart Tags в примере с Word 2002. Но есть и заметные отличия, которые нуждаются в дополнительном обсуждении.
Понятно, что макрокоманда MySmartTags представляет собой очень простой пример реализации обработки текста, который должен лишь проиллюстрировать основные подходы к этому вопросу. Например, поиск теримнов выполняется до первого описателя, где этот термин встречается. Однако очевидно, что совсем нетрудно написать код с созданием комбинированного меню, если найдены несколько распознавателей для одного термина.
При этом на приведенном примере хорошо видны достоинства данного варианта по сравнению с технологией смарт-тегов в случае с XML-описателями:
- Здесь мы решили описанную выше проблему с игнорированием регистра русских терминов и наличия склонений. Ведь в описателе у нас записано слово «Фортран», а мы обрабатывали «фортраном» (рис. 9). При этом в качестве аргумента {TEXT} применяется именно ключевой термин, а не выделенное слово. Понятно, что для разработчика здесь открывается полная свобода в организации поиска.
- Вся регистрация обработчиков Smart Tags выполняется на уровне данного компьютера, в фиксированном каталоге. В нашем же примере с использованием макрокоманд мы можем гибко управлять режимами обработки, привязывая нужные режимы обработки не только к конкретным приложениям, но и к документам. Действительно, где-то будет необходимо включать обработку лекарственных терминов, а где-то — слов по теме программирования.
Конечно, при прочих равных условиях макрокоманды работают медленнее машинного кода, но никто не мешает нам реализовать эту же функциональность в виде двоичных ActiveX DLL, в том числе с применением модели COM Add-Ins.
Разумеется, приведенный здесь вариант не является точной копией технологии Smart Tags. Есть одно качественное отличие — в случае Smart Tags распознавание терминов выполняется автоматически при вводе текста. В случае макрокоманд это делается по запросу пользователя в явном виде. И вот тут мы подходим к одному из главных вопросов: а насколько в реальной жизни необходимо это автоматическое распознавание? Может быть, гораздо чаще требуется именно выполнение подобных операций по специальной команде? Поясним это на простом примере.
В Office XP нет обработки русских имен. А нужно ли создавать такое автоматическое распознавание подобных терминов (тем более для русского языка с его склонениями)? Ведь пользователю гораздо проще самому понять, где фамилия человека, а где номер телефона. Тогда ему нужно только выделить нужный фрагмент и обратиться к соответствующей функции...
Этими вопросами и хотелось бы закончить статью, подчеркнув при этом, что данная тема нуждается в более глубоком обсуждении, так как некоторые интересные моменты в технологии Smart Tags действительно имеются. Например, все та же возможность выполнения автоматического анализа текста при его вводе (ведь это может быть не только выделение смарт-тегов!). Или использование новых VBA-объектов, связанных с этой технологией. Не говоря уже о том, что Internet Explorer не имеет cреды VBA. Хотя, возможно, было бы лучше включить ее в состав браузера.
Так или иначе, но тема нуждается в более детальном и глубоком изучении.
КомпьютерПресс 11'2001