Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kovalev_Karaseva_Multilingvisticheskie_tekhnologii.doc
Скачиваний:
129
Добавлен:
06.03.2016
Размер:
3.28 Mб
Скачать
    1. 5.2. Тезаурус sdk

Тезаурус SDKсостоит из двух компонентов [64]:

  • утилиты сборки;

  • библиотеки времени исполнения.

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

  • разбиение строки на слова;

  • определение информативности слова. Если слово признается неинформативным(«стоп-слово»), то оно не помещается в двоичный файл тезауруса;

  • лемматизация слов.

Модуль взаимодействия оперирует со специальными объектами (их иногда называют свертками), реализующими интерфейсы ITb32PortableTermи ITb32TermLexId. Этот модуль доступен через интерфейс ITb32Tokenizer. Описания интерфейсов приведены в работе [67].

Для сравнения объектных представлений терминов используется метод ITb32PortableTerm::GetTextSignature, который возвращает строку, однозначно идентифицирующую термин. В некоторых версиях тезауруса SDKвозвращается текстовое представление термина, в других – преобразованный в строку идентификатор лексемы (например, 0xF4567A). В результате реализация модуля взаимодействия должна гарантировать, что объекты с одинаковыми сигнатурами эквивалентны для внешнего мира (в первую очередь для индексатора).

Рассмотрим функционирование компонентов тезауруса.

Утилита сборки формирует два файла: двоичный файл словаря и текстовый файл координат, предназначенный для обработки индексатором (программа npNdxBuilder), формирующим два файла двоичных индексов тезаурусных статей.

В файл словаря заносится заголовок (структура ThesaurusHeader), содержащий сигнатуру dwThesaurusDictFileSignature, версию формата (1.0), версию словаря (задается в командной строке), текстовое сообщение фиксированной длины (задается в командной строке) и дату формирования файла.

В процессе сборки выполняются следующие операции.

1. Считывается и анализируется очередная статья исходного текстового представления файла тезауруса.

2. Каждое поле статьи разбивается на слова при помощи вызова ITb32Tokenizer::ParseString. На этой же операции определяется информативность слов поля.

3. Для каждого поля тезаурусной статьи выполняются следующие действия:

  • если поле содержит символ * или /, то оно удаляется;

  • каждое информативное слово посылается в соответствующий объект вызовом ITb32Tokenizer::Tokenize. Неинформативные слова удаляются, а их количество запоминается. Строковое представление слов будет использоваться при формировании словаря и индексного файла, поэтому их необходимо сохранить рядом с указателем на свертки;

  • если в словосочетании обнаружились несколько сверток с одинаковыми сигнатурами, то дубли удаляются (например, словосочетание «поиск поиска» должно быть редуцировано до «поиск»);

  • количество уникальных информативных слов поля статьи запоминается.

4. Если оказывается, что в статье существуют несколько полей, содержащих одинаковые множества терминов (сравниваются, естественно, сигнатуры объектов), то дубли удаляются. Равными считаются поля, в которых слова с одинаковыми сигнатурами расположены в одинаковых позициях (например, «газетный сверток» и «газетного над свертком»).

5. Запоминается текущая позиция в файле словаря.

6. Формируется двоичный образ статьи в памяти. Образ состоитиз заголовка и последовательности полей. Заголовок тезаурусной статьи (структура ThesaurusArticleHeader) содержит размер двоичного образа статьи в байтах, 2 байта кода отношений и количество ее полей. Если в статье используется одно отношение (симметричное), то оба байта кода имеют одинаковое значение. Для каждого поля статьи формируется заголовок (структура ThesaurusArticleField), содержащий тематическую помету поля. В двоичный образ статьи последовательно заносятся заголовки и текст каждого из полей статьи. Тексты представляются в том же виде, в котором они содержатся в исходном словаре. Желательно удалить начальные и конечные пробелы функциями ::KillBeginSpace и ::KillEndSpace. Строки на конце ограничиваются нулем. Таким образом, после считывания в памятьвсей статьи можно не копировать строки в дополнительные буферы,а пользоваться ими на месте.

7. Статья записывается в файл словаря. Туда же добавляются нулевые байты для выравнивания позиции на величину, кратную dwThesaurus-DictGranularity (типовое значение – 4).

8. Из полученных выше смещения начала статьи в словаре, идентификатора тезауруса и информации о типе отношения формируется индексный номер статьи в виде 32-битного целого без знака. Для того чтобыв процессе работы программы строилась возрастающая последовательность номеров статей, необходимо принять следующий порядок битовых полей: сначала идентификатор тезауруса, затем смещение в двоичном файле и, наконец, тип отношения. В текстовый файл индекса заносится строка #doc 0x%08X\n.

9. Для каждого слова статьи формируется индексная координата, также в виде 32-битного целого без знака. В нее помещается номер поля, количество значимых слов поля и номер слова в поле. Координата заносится в файл индекса в виде строки #pos 0x%08X\n. Если в командной строке задана опция –lex, то вычисляется числовой идентификатор слова (метод ITb32TermLexId::GetInfo) и выводится строка #lex 0x%08X\n. В противном случае появляется строка с текстовым представлением слова (но не сигнатурой!).

Библиотека времени исполнения производит расширение запроса по тезаурусному словарю и выполняет три функции:

  • инициализацию. В качестве параметров эта функция получает имена двоичных файлов словаря и индексов и указатель на модуль взаимодействия с внешним миром;

  • расширение запроса. Данная функция получает массив указателей на свертки, соответствующих словам запроса, и генерирует массив терминов запроса. Термин представляет собой множество слов, представленных в виде сверток и объединенных операторами И, ИЛИ и др.;

  • освобождение ресурсов.

К библиотеке времени исполнения предъявляются следующие требования:

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

  • запрещается изменять глобальные переменные и объекты в процессе расширения запроса. Выполнение этого требования обеспечивает устойчивость программы к многопоточной обработке.

Рассмотрим принципы организации тезауруса.

Тезаурус разбивается на статьи. Статья состоит из заглавного термина и терминов, связанных некоторыми отношениями с заглавным термином. Обычно в статье содержатся термины, связанные с заглавным термином одним отношением [30; 68]. Таким образом, информация о термине в общем случае может находиться в нескольких тезаурусных статьях.На этапе поиска такая организация увеличивает время выборки данных из тезауруса, но в то же время устраняет дублирование информации и упрощает процедуру ведения тезауруса [36; 85].

Отношения между терминами разбиваются на симметричные и несимметричные.

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

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

Статья с симметричным отношением выглядит следующим образом:

партнер #1 * заглавный термин

&1 * словообразовательные аналоги

партнер #1

партнерский #1

партнерство #1

партнерский #1

партнерство #1

Здесь #1 – тематическая помета; &1 – номер отношения.

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

Несимметричным, в частности, является родовидовое отношение. В этом случае заглавный термин связан с остальными терминами родовидовым отношением, а каждый незаглавный термин связан с заглавным термином видородовым отношением.

Если по некоторому термину в тезаурусе находится статья, содержащая термины, связанные несимметричным отношением, причем искомый термин является заглавным в статье, то из этой статьи выбираются все термины, связанные несимметричным отношением с заглавным термином, и указывается номер соответствующего отношения. Например, осуществляя поиск по слову «консервы», находим статью, в которой это слово является заглавным термином. В результате выдаются связанные термины: крабоконсервный, молочноконсервный, мясоконсервный и т. д.

Если же в найденной статье с несимметричным отношением искомый термин не заглавный, то выдается заглавный термин статьи. Например, при поиске по слову «молочноконсервный», находим статью, в которой это слово не является заглавным термином. В результате выдается заглавный термин «консервы».

Пример статьи с несимметричным отношением:

консервы #1

&5 &6 * родовидовое отношение

крабоконсервный #1

крабо-консервный #1

молочноконсервный #1

молочно-консервный #1

мясоконсервный #1

мясо-консервный #1

Здесь &5 – родовидовое отношение (консервы – крабоконсервный); &6 – обратное видородовое отношение (крабоконсервный – консервы).

Тезаурус оформляется в виде файла в формате ASCII-DOS и разбивается на статьи. Признаком начала статьи является строка

*** Тезаурусная статья ***

Такая строка должна располагаться в начале каждой статьи (в частности, она является первой строкой файла тезауруса). За последней статьей тезауруса никаких дополнительных строк нет (последняя строка последней статьи является последней строкой файла тезауруса).

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

Первая строка статьи содержит заглавный термин, после которого идет тематическая помета типа #N, гдеN– номер тематической пометы.

Далее располагаются группы строк, содержащие один или несколько терминов, связанных с заглавным термином одинаковым отношением (например, все термины группы – синонимы заглавного термина).

Для симметричных отношений первая строка группы имеет вид &N, гдеN– номер отношения (целое положительное число, не меньше 1), для несимметричных отношений – вид &N1 &N2, гдеN1 – номер отношения между заглавным термином статьи и термином группы;N2 – номер отношения между термином группы и заглавным термином статьи.

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

В любой строке может быть комментарий, начинающийся со звездочки, которая должна быть единственной в строке.

Приведем примеры тезаурусных статей:

*** Тезаурусная статья ***

партнер #1 * заглавный термин

&2 * синонимы

компаньон #1

бизнес-партнер #1

союзник #1

*** Тезаурусная статья ***

партнер #1 * заглавный термин

&9 * квазисинонимы

совладелец #1

сотрудник #1

*** Тезаурусная статья ***

партнер #1 * заглавный термин

&10 * ассоциации

единомышленник #1

коллега #1

товарищ по несчастью #1

*** Тезаурусная статья ***

Александр #1

&11 * разговорные формы имен

Саша #1

Сашка #1

Санька #1

Санечка #1

Шурок #1

Шурик #1

Информация об отношениях в тезаурусе представляется в виде файла в формате ASCII. Для каждого отношения выделяется отдельная строка.

В начале строки располагается номер отношения, затем через один или несколько пробелов помещается вес отношения – положительное число, не превышающее 1. Строки не обязательно расположены в порядке возрастания номера отношения.

В любой строке может быть комментарий, начинающийся со звездочки, причем эта звездочка должна быть единственной в строке, например:

&1 0.95 * словообразовательные аналоги

&3 0.9 * синонимы

&5 0.95 * родовидовое отношение

&6 0.4 * видородовое отношение

&9 0.7 * квазисинонимы

&10 0.2 * ассоциации

&11 0.9 * разговорные формы имен

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]