Следующие примеры устанавливаются в $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)
Этот пример -- это простой 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) в байтах также добавится в резюме содержимого.
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.
Этот пример демонстрирует, как настроить шаги распознавание типов и выбора кандидатов в 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
Этот пример демонстрирует, как настроить шаги распознавания типов и суммирования в 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
Этот пример демонстрирует, как использовать фильтры RootNode для настройки выбора кандидатов в Gatherer'е (см. раздел Фильтры RootNode). Только объекты, которые пройдут через фильтры, будут получены по сети (см. раздел Нумерация Gatherer'а и выбор кандидатов).
Чтобы запустить этот пример, наберите:
% cd $HARVEST_HOME/gatherers/example-5
% ./RunGatherer
После того, как Gatherer закончит свою работу, он запустит демон Gatherer, который будет предоставлять резюме содержимого объектов. Чтобы посмотреть резюме, наберите:
% gather localhost 9555 | more