ВебмастерМетрикаВиджетыРекламная сетьДиректПоиск для сайтаAPI
Войти

Руководство по установке и эксплуатации

В формате PDF

Конфигурация HTML-парсера

Конфигурационный файл HTML-парсера

Пример

<HtmlParser>
    <Zones>
        zonename : zone1,zone2, ...
        ...
    </Zones>
    <Attributes>
        attrname : attr1,attr2, ...
        ...
    </Attributes>
</HtmlParser>

Проектирование конфигурации HTML-парсера

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

  1. Определить имена поисковых зон и поисковых атрибутов, которые будут участвовать в языке запросов.

    Пример: Для поиска по подзаголовкам документов введем поисковую зону header. Для поиска по тексту ссылок на другие документы введем поисковую зону anchor. Для поиска по адресам ссылок на другие документы введем поисковый атрибут link.

  2. Для каждой поисковой зоны указать список имен HTML-тегов, содержимое которых должно принадлежать данной поисковой зоне.

    Пример: Определим, что поисковой зоне header принадлежит текст документа, находящийся внутри любого из тегов <h1>...</h1>, <h2>...</h2> или <h3>...</h3>.

  3. Определить, будут ли некоторые поисковые зоны условными. Условными будут называться поисковые зоны, образуемые только при наличии заданного поискового атрибута. Для списка HTML-тегов, определяющего поисковую зону, может быть дополнительно указано имя некоторого поискового (не HTML!) атрибута. Если имя указано, и при попытке создать поисковую зону из содержимого данного HTML-тега эта зона не получает поискового атрибута с указанным именем (и любым значением), то поисковая зона не создается.

    Пример: Допустим поисковой зоне anchor должен принадлежать текст документа, находящийся внутри тега <a>...</a>, но только при условии, что данный текст ссылается на другой документ. Для этого данный тег должен иметь HTML-атрибут href. Поэтому определим поисковую зону anchor как условную, возникающую только при наличии поискового атрибута link, описанного в следующем примере.

  4. Для каждого поискового атрибута выбрать его тип (из числа описанных в разделе Типы поисковых атрибутов) и список пар (имя HTML-тега, имя HTML-атрибута этого тега). Если у HTML-тега, имя которого совпадает с первым именем в паре имеется HTML-атрибут, имя которого совпадает со вторым именем в паре, то значение этого HTML-тега распознается как значение определяемого поискового атрибута по правилам, специфичным для указанного типа поискового атрибута.

    Пример: Определим, что поисковый атрибут link имеет тип URL и значениями этого атрибута будут значения HTML-атрибута href HTML-тега <a> и значения HTML-атрибута src HTML-тега <frame>.

Конфигурация парсера, спроектированная в примерах данного раздела, имеет следующий вид.

<HtmlParser>
    <Zones>
        header : h1,h2,h3
        anchor : a/link
    </Zones>
    <Attributes>
        link : URL,any/a.href,frame.src
    </Attributes>
</HtmlParser>

Формальные правила описания конфигурации приведены в следующем разделе.

Синтаксис конфигурационного файла

Описание дополнительных настроек HTML-парсера размещается в отдельном файле. При этом в секции DocFormat конфигурационного файла индексатора нужно задать путь к файлу конфигурации парсера (путь к файлу указывается через директиву Config). Вся конфигурация парсера должна быть размещена внутри секции <HtmlParser>. Директивы, определяющие поисковые зоны, располагаются внутри подсекции <Zones>, а директивы, определяющие поисковые атрибуты - внутри подсекции <Attributes>.

Далее приводятся формальные правила написания конфигураций, и даются конкретные примеры с подробными комментариями.

Конфигурирование поисковых зон

Пример

Формальные правила описания зон можно представить следующим набором выражений:

<Zones>
    yxzone : htelem(,htelem)*
    yxzone : htelem(,htelem)*/yxattr
</Zones>

где:

  • yxzone - имя поисковой зоны;
  • htelem - имя HTML-тега;
  • yxattr - имя поискового атрибута, определяющего условную поисковую зону;
  • (...)* - ноль, один или несколько элементов.

Имя поисковой зоны не может совпадать с одним из зарезервированных имен "doc", "empty", "any".

Вместо имени HTML-тега допустимо использовать символ "_" (подчеркивание). Он означает любой тег.

Пример: Текст внутри тега “title” принадлежит поисковой зоне “title”.

title : title

Пример: Текст внутри всех элементов “Hn”, а также заголовки таблиц принадлежат поисковой зоне “header” .

header : h1,h2,h3,h4,h5,h6,caption

Пример: Текст внутри тега “a” принадлежит поисковой зоне “anchor” только при условии, что имеется поисковый атрибут “link”.

anchor : a/link

Конфигурирование поисковых атрибутов

Пример

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

<Attributes>
    yxattr : TYPE/htelem.htattr(,htelem.htattr)*
    yxattr : TYPE,yxzone/htelem.htattr(,htelem.htattr)*
    yxattr : TYPE,yxzone,function/htelem.htattr(,htelem.htattr)*
    yxattr : TYPE,yxzone,function,ignore/htelem.htattr(,htelem.htattr)*
    # только для атрибутов типа URL
    yxattr : TYPE,yxzone,function,ignore,ext( ext)*/htelem.htattr(,htelem.htattr)*
    yxattr : TYPE,yxzone,function,ignore,ext( ext)*,local/htelem.htattr(,htelem.htattr)*
</Attributes>

где:

  • yxzone - имя поисковой зоны;
  • yxattr - имя поискового атрибута;
  • htelem - имя HTML-тега;
  • htattr - имя HTML-атрибута;
  • (...)* - ноль, один или несколько элементов;
  • TYPE - тип поискового атрибута, как описано в разделе Типы поисковых атрибутов;
  • function - одно из строковых значений, указанных ниже, определяющих правила распознавания текста атрибута;
  • ignore - флажок, указывающий, что документный атрибут надо распознавать, но не надо запоминать его в индексных файлах. Используется для создания группировочных атрибутов;
  • ext - список расширений имен файлов разделенных пробелами;
  • local - флажок для пометки только локальных (внутрисайтовых) ссылок.

Символ "_" (подчеркивание) вместо имени HTML-тега или HTML-атрибута обозначает любой элемент или атрибут. Если символ "_" задан вместо имени поискового атрибута, имя поискового атрибута будет совпадать с именем HTML-атрибута.

Пример: Многие HTML-теги могут иметь всплывающую подсказку, заданную через HTML-атрибут title. Чтобы проиндексировать все эти атрибуты, можно определить поисковый атрибут tooltip следующим образом:

tooltip : TEXT/_.title

Каждое из слов текста атрибута title любого HTML-тега войдет в индекс с учетом морфологии.

Особый случай представляют собой теги <META> и <LINK>. Для удобства их использования принято, что именем атрибута тега <META> является значение атрибутов NAME или HTTP-EQUIV, а значением - содержимое атрибута CONTENT. Для тега <LINK> именем атрибута считается значение атрибутов REL/REV, а значением - содержимое атрибута HREF.

Пример: Каждый документ в электронной библиотеке содержит meta-тег следующего вида:

<meta name="author" content="_имя_автора_">

Чтобы обеспечить поиск документов, принадлежащих конкретному автору, определим поисковый атрибут author:

author : TEXT/meta.author

Пример:

email : URL/link.made
_ : TEXT/meta._
_ : URL/link._

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

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

Значение Описание
doc Документный атрибут, тот же самый результат получается, если имя зоны не указывать.
empty Атрибут данной точки документа, то есть атрибут специальной зоны нулевой длины, как обсуждалось в Поисковые зоны и атрибуты.
any Если для содержимого данного HTML-элемента сформирована поисковая зона, поисковый атрибут является атрибутом этой зоны. В противном случае это атрибут данной точки документа.
другое имя Если из содержимого HTML-элемента не сформирована поисковая зона с данным именем, поисковый атрибут не создается.

Пример: Для поиска картинок по именам файлов определим поисковый атрибут image:

image : URL,empty/img.src

Аргумент function может принимать следующие значения:

Значение Описание
parse_http_expires Распознавать текст атрибута по правилам, применяемым для meta.expires.
parse_http_refresh Распознавать текст атрибута по правилам, применяемым для meta.refresh.
parse_http_charset Распознавать текст атрибута по правилам, применяемым для meta.content-type.
parse_meta_robots Распознавать текст атрибута по правилам, применяемым для meta.robots.
parse_data_integer Распознавать текст атрибута как целое число.

Аргумент function может быть пропущен. В этом случае применяются правила распознавания атрибута по умолчанию, в соответствии с его типом.

Имена поисковых атрибутов типа URL могут определяться не только наличием или отсутствием соответствующих тегов и их атрибутов, но и расширениями имен файлов, составляющих значение HTML-атрибута, а также фактом, является ли ссылка локальной для данного сайта или уходит на внешние ресурсы.

Пример: Создадим дополнительные поисковые атрибуты для случаев, когда HTML-атрибут представляет собой внутрисайтовую ссылку или ссылается на музыкальный файл:

# По умолчанию - расширения не даны
link : URL,anchor/a.href
link : URL,any/frame.src,iframe.src,area.href

# В случае музыкальных расширений или внутренних ссылок меняем имя атрибута
linkmp3 : URL,anchor,,,mp3 mpga mp2 ra/a.href
linkint : URL,anchor,,,,local/a.href
linkint : URL,any,,,,local/frame.src,iframe.src,area.href

Если в конфигурации зон сформирована условная зона anchor по правилу

anchor : a/link

то текст внутрисайтовых и музыкальных ссылок в эту зону не попадет.

Конфигурация по умолчанию

Ниже приведен пример конфигурационного файла для HTML-парсера. Данная настройка соответствует поведению парсера по умолчанию, то есть будет использоваться в случае, если дополнительная конфигурация парсера не указана.

Пример

<HtmlParser>
    <Zones>
        title : title
        address : address
        anchor : a/link
    </Zones>
    <Attributes>
        _ : LITERAL/meta._
        link : URL,anchor/a.href
        link : URL,any/frame.src,iframe.src,area.href
        link : URL/link._
        robots : LITERAL,doc,parse_meta_robots,ignore/meta.robots
        refresh : URL,doc,parse_http_refresh,ignore/meta.refresh
        style : URL/link.stylesheet
        profile : URL/head.profile
        script : URL,any/script.src
        image : URL,any/img.src
        applet : URL,any/applet.code,applet.object
        object : URL,any/object.data,object.classid
        abstract : TEXT/meta.description
        keywords : TEXT/meta.keywords
        hint : TEXT,any/img.alt,area.alt
        tooltip : TEXT,any/_.title
    </Attributes>
</HtmlParser>