След Пред Содержание

8. Примеры Gatherer

Следующие примеры устанавливаются в $HARVEST_HOME/gatherers по умолчанию (см. раздел Установка ПО Harvest).

Дистрибутив Harvest содержит несколько примеров того, как конфигурировать, настраивать и запусктаь Gatherer'ы. Это раздел проведет вас через некоторые примеры Gatherer'ов. Цель -- дать вам почувствовать, что вы можете делать с Gatherer'ом и как это делать. Вам не обязательно прорабатывать все эти примеры; каждый из них поучителен по-своему.

Чтобы использовать примеры Gatherer'ов, вам нужно определить каталог bin Harvest'а в вашей переменной пути, и определить HARVEST_HOME. Например:

        % setenv HARVEST_HOME /usr/local/harvest
        % set path = ($HARVEST_HOME/bin $path)

8.1 Пример 1 - простой Gatherer

Этот пример -- это простой Gatherer, который использует установки по умолчанию. Единственное, что нужно сделать пользователю для работы с этим Gatherer'ом -- это указать список URL'ов, из которых собирать данные (см. раздел Gatherer).

Чтобы запустить этот пример, наберите:

        % cd $HARVEST_HOME/gatherers/example-1
        % ./RunGatherer

Чтобы посмотреть конфигурационный файл этого Gatherer'а, посмотрите example-1.cf. Первые несколько строчек -- это переменные, которые указывают некоторую локальную информацию о Gatherer'е (см. раздел Задание значений переменных в конфигурационном файле Gatherer'а). Например, каждое резюме содержимого будет содержать имя Gatherer'а (Gatherer-Name), который сгенерировал его, номер порта (Gatherer-Port), который будет использоваться для экспорта индексной информации, каталог, который содержит Gatherer (Top-Directory). Заметьте, что есть один RootNode URL и один LeafNode URL.

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

        % gather localhost 9111 | more

Следующий объект SOIF должен выглядеть примерно как тот, который сгенерирует этот Gatherer.

        @FILE { http://harvest.cs.colorado.edu/~schwartz/IRTF.html
        Time-to-Live{7}:        9676800
        Last-Modification-Time{1}:      0
        Refresh-Rate{7}:        2419200
        Gatherer-Name{25}:      Example Gatherer Number 1
        Gatherer-Host{22}:      powell.cs.colorado.edu
        Gatherer-Version{3}:    0.4
        Update-Time{9}: 781478043
        Type{4}:        HTML
        File-Size{4}:   2099
        MD5{32}:        c2fa35fd44a47634f39086652e879170
        Partial-Text{151}:      research problems
        Mic Bowman
        Peter Danzig
        Udi Manber
        Michael Schwartz
        Darren Hardy
        talk
        talk
        Harvest
        talk
        Advanced
        Research Projects Agency

        URL-References{628}:
        ftp://ftp.cs.colorado.edu/pub/cs/techreports/schwartz/RD.ResearchProblems.Jour.ps.Z
        ftp://grand.central.org/afs/transarc.com/public/mic/html/Bio.html
        http://excalibur.usc.edu/people/danzig.html
        http://glimpse.cs.arizona.edu:1994/udi.html
        http://harvest.cs.colorado.edu/~schwartz/Home.html
        http://harvest.cs.colorado.edu/~hardy/Home.html
        ftp://ftp.cs.colorado.edu/pub/cs/misc/schwartz/HPCC94.Slides.ps.Z
        ftp://ftp.cs.colorado.edu/pub/cs/misc/schwartz/HPC94.Slides.ps.Z
        http://harvest.cs.colorado.edu/harvest/Home.html
        ftp://ftp.cs.colorado.edu/pub/cs/misc/schwartz/IETF.Jul94.Slides.ps.Z
        http://ftp.arpa.mil/ResearchAreas/NETS/Internet.html

        Title{84}:      IRTF Research Group on Resource Discovery
        IRTF Research Group on Resource Discovery

        Keywords{121}:  advanced agency bowman danzig darren hardy harvest manber mic
        michael peter problems projects research schwartz talk udi

        }

Заметьте, что хотя конфигурационный файл Gatherer'а содержит только 2 URL'а (один в разделе RootNode и один в разделе LeafNode), появилось больше, чем 2 резюме в базе данных Gatherer'а. Gatherer развернул RootNode URL на десятки LeafNode URL'ов рекурсивно извлекая ссылки из файла HTML http://harvest.cs.colorado.edu/. Далее, для каждого данного LeafNode в Gatherer'е, было сгенерировано резюме, как в приведенном выше примере для http://harvest.cs.colorado.edu/~schwartz/IRTF.html.

Summarizer HTML извлечет структурированную информацию об авторе и заголовке файла. Он также извлечет любые ссылки URL в атрибут URL-References, а любой тэг привязки anchor -- в атрибут Partial-Text. Остальная информация о файле HTML, такая как его сумма MD5 (см. RFC1321) и его размер (File-Size) в байтах также добавится в резюме содержимого.

8.2 Пример 2 - включение информации, сгенерированной вручную

Gatherer способен ``разорвать'' ресурс в поток резюме. Это полезно для файлов, которые содержат информацию, сгенерированную вручную, которая может описывать один или более ресурсов, или для построения шлюза между разными структурированными форматыми и SOIF (см. раздел Формат взаимообмена краткими изложениями документов (SOIF).

Этот пример демонстрирует ``взрыватель'' (exploder) для формата Linux Software Map (LSM). Файлы LSM содержат структурированную информацию (как автор, размещение и т.д.) о доступном ПО для операционных систем Linux.

Чтобы запустить это пример, наберите:

        % cd $HARVEST_HOME/gatherers/example-2
        % ./RunGatherer

Чтобы посмотреть конфигурационный файл этого Gatherer'а, посмотрите example-2.cf. Заметьте, что Gatherer имеет свой каталог Lib-Directory (обратитесь в раздел Задание значений переменных в конфигурационном файле Gatherer'а за помощью в написании конфигурационных файлов). Каталог библиотеки содержит настройки для типов и выбора кандидатов Essence. В этом примере, мы только настроили шаг выбора кандидатов. lib/stoplist.cf определяет типы, которые Essence должен проиндексировать. Этот пример использует пустой файл stoplist.cf, что говорит Essence индексировать все файлы.

Gatherer получает каждый из LeafNode URL'ов, которые являются файлами в формате Linux Software Map в FTP архиве Linux tsx-11.mit.edu. Gatherer понимает, что файл ``.lsm'' -- это файл типа LSM, так как в lib/byname.cf присутствует эвристика по имени.Тип LSM -- это упакованный тип, что указано в исходном коде Essence (src/gatherer/essence/unnest.c). Для упакованных типов запускаются программы Exploder (называемые TypeName.unnest), а не обычные summarizer'ы. Программа LSM.unnest -- это стандартная программа exploder, которая берет файл LSM и генерирует один или более соотвествующих объектов SOIF. Когда Gatherer завершает работу, он содержит один или более соответствующих объектов SOIF для ПО, описанного в каждом файле LSM.

Потом Gatherer запускает демон Gatherer, который будет предоставлять резюме содержимого объектов. Чтобы посмотреть резюме, наберите:

        % gather localhost 9222 | more

Так как tsx-11.mit.edu -- популярный и загруженный архив, Gatherer часто не сможет получить файлы LSM. Если вы подозреваете, что что-то подобное случилось, посмотрите log.errors и log.gatherer, чтобы определить проблему.

Следующие два объекта SOIF были сгенерированы этим Gatherer'ом. Первый объект -- описывает сам файл LSM, а второй -- ПО, описанное в файле LSM.

        @FILE { ftp://tsx-11.mit.edu/pub/linux/docs/linux-doc-project/man-pages-1.4.lsm
        Time-to-Live{7}:        9676800
        Last-Modification-Time{9}:      781931042
        Refresh-Rate{7}:        2419200
        Gatherer-Name{25}:      Example Gatherer Number 2
        Gatherer-Host{22}:      powell.cs.colorado.edu
        Gatherer-Version{3}:    0.4
        Type{3}:        LSM
        Update-Time{9}: 781931042
        File-Size{3}:   848
        MD5{32}:        67377f3ea214ab680892c82906081caf
        }

        @FILE { ftp://ftp.cs.unc.edu/pub/faith/linux/man-pages-1.4.tar.gz
        Time-to-Live{7}:        9676800
        Last-Modification-Time{9}:      781931042
        Refresh-Rate{7}:        2419200
        Gatherer-Name{25}:      Example Gatherer Number 2
        Gatherer-Host{22}:      powell.cs.colorado.edu
        Gatherer-Version{3}:    0.4
        Update-Time{9}: 781931042
        Type{16}:       GNUCompressedTar
        Title{48}:      Section 2, 3, 4, 5, 7, and 9 man pages for Linux
        Version{3}:     1.4
        Description{124}:       Man pages for Linux.  Mostly section 2 is complete.  Section
        3 has over 200 man pages, but it still far from being finished.
        Author{27}:     Linux Documentation Project
        AuthorEmail{11}:        DOC channel
        Maintainer{9}:  Rik Faith
        MaintEmail{16}: faith@cs.unc.edu
        Site{45}:       ftp.cs.unc.edu
        sunsite.unc.edu
        tsx-11.mit.edu
        Path{94}:       /pub/faith/linux
        /pub/Linux/docs/linux-doc-project/man-pages
        /pub/linux/docs/linux-doc-project
        File{20}:       man-pages-1.4.tar.gz
        FileSize{4}:    170k
        CopyPolicy{47}: Public Domain or otherwise freely distributable
        Keywords{10}:   man
        pages

        Entered{24}:    Sun Sep 11 19:52:06 1994
        EnteredBy{9}:   Rik Faith
        CheckedEmail{16}:       faith@cs.unc.edu
        }

Мы также построили Gatherer, который переводит около пяти индесных файлов из различных PC архивов в более, чем 25000 резюме. Каждый из этих индексных файлов содержит сотни однострочных описаний о программном обеспечении, которые доступны по анонимному доступу FTP.

8.3 Пример 3 - Настройка распознавания типов и выбора кандидатов

Этот пример демонстрирует, как настроить шаги распознавание типов и выбора кандидатов в Gatherer'е (см. раздел Настройка шагов распознавания типов, выбора кандидатов, извлечения прдставлений и суммирования). Этот Gatherer распознает страницы WWW, и он сконфигурирован только для собирания индексной информации с этих страниц.

Чтобы запустить этот пример, наберите:

        % cd $HARVEST_HOME/gatherers/example-3
        % ./RunGatherer

Чтобы посмотреть конфигурационный файл этого Gatherer'а, посмотрите example-3.cf. Как в разделе Пример 2, этот Gatherer имеет свой библиотечный каталог, который содержит настройки Essence. Так как мы заинтересованы только в индексировании домашних страниц, нам нужно только определить эвристику для распознавания домашних страниц. Как показано ниже, мы можем использовать эвристику по именам URL для определения домашних страниц в lib/byurl.cf. Мы также добавили тип по умолчанию Unknown, чтобы сделать выбор кандидатов проще.

        HomeHTML                ^http:.*/$
        HomeHTML                ^http:.*[hH]ome\.html$
        HomeHTML                ^http:.*[hH]ome[pP]age\.html$
        HomeHTML                ^http:.*[wW]elcome\.html$
        HomeHTML                ^http:.*/index\.html$

Конфигурационный файл lib/stoplist.cf содержит список типов, которые не надо индексировать. В этом примере Unknown -- это единственный тип, занесенный в этот список, так что Gatherer будет отклонятьт только файлы типа Unknown. Вы можете также распознавать URL'ы по именам файлов (в byname.cf) или по содержимому (в bycontent.cf и magic); хотя в этом примере, нам не нужно использовать эти механизмы. Summarizer HomeHTML.sum, установленный по умолчанию, суммирует все файлы HomeHTML.

После того, как Gatherer закончит работу, он запустит демон Gatherer, который будет предоставлять резюме содержимого объектов. Вы заметите, что присутствуют только резюме для файлов HomeHTML. Чтобы посмотреть резюме, наберите:

        % gather localhost 9333 | more

8.4 Пример 4 - настройка распознавания типов и суммирование

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

Чтобы посмотреть конфигурационный файл Gatherer'а, посмотрите example-4.cf. Как в примерах в Пример 2 и Пример 3, этот Gatherer имеет свой библиотечный каталог, который содержит конфигурационные файлы Essence. Конфигурационные файлы Essence такие же, как и для настроек по умолчанию, кроме lib/byname.cf, который содержит две настройки для новых форматов файлов.

Использование регулярных выражений для суммирования формата

Первый новый формат -- тип ``ReferBibliographic'', который относится к использованию программ для представления библиографической информации. Чтобы понять, что файл записан в этом формате, мы будем использовать соглашение, что имена файлов заканчиваются на ``.referbib''. Таким образом, мы добавим эвристику по имени для настройки распознвания типов. Эвристика по именам представляется в виде регулярного выражения напротив имени файла в lib/byname.cf:

        ReferBibliographic      ^.*\.referbib$

Теперь, чтобы написать summarizer для этого типа, нам понадобится образец файла ReferBibliographic:

        %A A. S. Tanenbaum
        %T Computer Networks
        %I Prentice Hall
        %C Englewood Cliffs, NJ
        %D 1988

Summarizer'ы Essence извлекают структурированную информацию из файлов. Один способ написать summarizer -- использовать регулярные выражения для определения, что надо извлекать. Для каждого типа информации, который вы хотите извлечь из файла, добавьте регулярное выражение, которое подойдет для нужных строк в файл lib/quick-sum.cf. Например, следующие регулярные выражения в lib/quick-sum.cf извлекут автора, заглавие, дату и другую информацию из файлов ReferBibliographic:

        ReferBibliographic      Author                  ^%A[ \t]+.*$
        ReferBibliographic      City                    ^%C[ \t]+.*$
        ReferBibliographic      Date                    ^%D[ \t]+.*$
        ReferBibliographic      Editor                  ^%E[ \t]+.*$
        ReferBibliographic      Comments                ^%H[ \t]+.*$
        ReferBibliographic      Issuer                  ^%I[ \t]+.*$
        ReferBibliographic      Journal                 ^%J[ \t]+.*$
        ReferBibliographic      Keywords                ^%K[ \t]+.*$
        ReferBibliographic      Label                   ^%L[ \t]+.*$
        ReferBibliographic      Number                  ^%N[ \t]+.*$
        ReferBibliographic      Comments                ^%O[ \t]+.*$
        ReferBibliographic      Page-Number             ^%P[ \t]+.*$
        ReferBibliographic      Unpublished-Info        ^%R[ \t]+.*$
        ReferBibliographic      Series-Title            ^%S[ \t]+.*$
        ReferBibliographic      Title                   ^%T[ \t]+.*$
        ReferBibliographic      Volume                  ^%V[ \t]+.*$
        ReferBibliographic      Abstract                ^%X[ \t]+.*$

Первое поле в lib/quick-sum.cf -- это имя типа. Второе поле -- атрибут, под которым надо извлекать информацию в строках, удовлетворяющих регулярному выражению из третьего поля.

Использование программ для суммирования формата

Второй новый формат -- это тип ``Abstract'', который является файлом, содержащим только текст с кратким описанием статьи (формат, который является принятым в технических отчетах архивов FTP). Чтобы распознать, что файл написан в этом формате, мы используем соглашение, что имена файлов типа ``Abstract'' заканчиваются на ``.abs''. Таким образом, мы добавим настройку распознавания типов в файл lib/byname.cf в виде регулярного выражения:

        Abstract                ^.*\.abs$

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

Программы Summarizer называется TypeName.sum, так что мы назовем наш новый summarizer Abstract.sum. Не забудьте поместить программу в каталог, который есть в вашей переменной пути, чтобы Gatherer мог запустить ее. Вы увидите ниже, что Abstract.sum -- это скрипт оболочки Bourne, который берет первые 50 строк файла, объявляет их атрибутом ``Abstract'' и выдает в виде пары SOIF атрибут-значение.

        #!/bin/sh
        #
        #  Usage: Abstract.sum filename
        #
        head -50 "$1" | wrapit "Abstract"

Запуск примера

Чтобы запустить этот пример, наберите:

        % cd $HARVEST_HOME/gatherers/example-4
        % ./RunGatherer

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

        % gather localhost 9444 | more

8.5 Пример 5 - Использование фильтров RootNode

Этот пример демонстрирует, как использовать фильтры RootNode для настройки выбора кандидатов в Gatherer'е (см. раздел Фильтры RootNode). Только объекты, которые пройдут через фильтры, будут получены по сети (см. раздел Нумерация Gatherer'а и выбор кандидатов).

Чтобы запустить этот пример, наберите:

        % cd $HARVEST_HOME/gatherers/example-5
        % ./RunGatherer

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

        % gather localhost 9555 | more


След Пред Содержание