DataparkSearch 4.42 Руководство: Поисковая машина
Пред. | Глава 3. Индексирование | След.

# 3.7. Внешние парсеры

DataparkSearch indexer может использовать внешние парсеры для различных типов файлов (mime types).

Парсер - это программа, которая конвертирует один из типов файла (mime type) в `text/plain` или `text/html`. Например, если у вас есть PostScript файлы, Вы можете использовать парсер (фильтр) ps2ascii, читающий из `stdin` PostScript файл и выдающий текст в ascci на `stdout`.

## 3.7.1. Поддерживаемые типы парсеров

Indexer поддерживает четыре типа парсеров, такие что:

- читают данные из `stdin` и выдают результат в `stdout`;

- читают данные из файла и выдают результат в `stdout`;

- читают данные из файла и помещают результат в файл;

- читают данные из `stdin` и помещают результат в файл.

## 3.7.2. Установка парсеров

1. Конфигурирование типов файлов (mime types)

   Сконфигурируйте Ваш веб-сервер на выдачу соответствующего заголовка `Content-Type`. Например, для apache, смотрите файл `mime.types`, большинство типов файлов уже указаны в нём.

   Если необходимо индексировать файлы на локальной файловой системе, или используя протокол `ftp` используйте команду AddType в `indexer.conf` для привязки типа файла к расширению файлов. Например:

       AddType text/html *.html

2. Добавление парсеров

   Добавление строк с определениями парсеров. Эти строки имеюют следующий формат с треми аргументами:

       Mime <from_mime> <to_mime> <command line>

   Например, следующая строка определяет парсер для man-страниц:

       # Use deroff for parsing man pages ( *.man )
       Mime  application/x-troff-man   text/plain   deroff

   Этот парсер будет получать данные из `stdin` и повещать результат в `stdout`.

   Некоторые парсеры не могут работать с `stdin`, а требуют указания имени файла для чтения данных. В этом случае indexer создаёт временный файл в директории `/tmp`, который будет удалён после завершения работы парсера. Используйте макро `$1` в командной строке парсера вместо требуемого имени файла. Например, команда Mimeдля конверотора catdoc, преобразующего файлы MS Word в ascii может выглядеть так:

       Mime application/msword text/plain "/usr/bin/catdoc -a $1"

   Если парсер записывает результат своей работы в файл, используйте макро `$2`. indexer заменить `$2` на имя временного файла, запустит парсер, прочитает результат из этого временного файла, а затем удалит его. Например:

       Mime application/msword text/plain "/usr/bin/catdoc -a $1 >$2"

   Парсер выше будет читать данные из первого временного файла и записывать результат во второй временный файл. Оба временных файла будут удалены по окончании работы парсера. Заметим, что результат использования этого парсера будет абсолютно таким же, как и предыдущего, они отличаютя только сопсобом выполнения: файл->`stdout` и файл->файл соответственно.

## 3.7.3. Воизбежание зависания парсера при выполнении

Воизбежание подвисания парсера при выполнении Вы можете указать в Вашем файле `indexer.conf` число времени в секундах, отводимое на работу парсеру, при помощи команды `ParserTimeOut`. Напрмиер:

    ParserTimeOut 600

Значение по умолчанию - 300 секунд, т.е. 5 минут.

## 3.7.4. Конвееры в командных строках парсеров

Вы можете использовать конвееры в командных строках парсеров. Например, следующие строки необходимы при индексировании загнузипленых страниц man на локальном диске:

    AddType  application/x-gzipped-man  *.1.gz *.2.gz *.3.gz *.4.gz
    Mime     application/x-gzipped-man  text/plain  "zcat | deroff"

## 3.7.5. Кодировки и парсеры

Некоторые парсеры могут выдавать результат в кодировке, отличной от указанной в команда LocalCharset. Указание кодировки парсера даёт возможность indexer перекодировать результат в нужную кодировку. Например, если catdoc сконфигурирован на вывод результата в windows-1251, а в LocalCharset указана кодировка koi8-r, используйте следующую команду для парсера документов MS Word:

    Mime  application/msword  "text/plain; charset=windows-1251" "catdoc -a $1"

## 3.7.6. Переменная окружения DPS_URL

При выполнении парсера, indexer создаёт переменную окружения DPS_URL, содержащую URL обрабатываемого документа. Вы можете использовать эту переменную в Ваших скриптах парсеров.

## 3.7.7. Некоторые внешние парсеры

- RPM парсер от Mario Lang `<lang@zid.tu-graz.ac.at>`

  /usr/local/bin/rpminfo:

      #!/bin/bash
      /usr/bin/rpm -q --queryformat="<html><head><title>RPM: %{NAME} %{VERSION}-%{RELEASE}
      (%{GROUP})</title><meta name=\"description\" content=\"%{SUMMARY}\"></head><body>
      %{DESCRIPTION}\n</body></html>" -p $1

  indexer.conf:

      Mime application/x-rpm text/html "/usr/local/bin/rpminfo $1"

  Он даёт такую информацию об RPM:

      3. RPM: mysql 3.20.32a-3 (Applications/Databases) [4]
             Mysql is a SQL (Structured Query Language) database server.
             Mysql was written by Michael (monty) Widenius. See the CREDITS
             file in the distribution for more credits for mysql and related
             things....
             (application/x-rpm) 2088855 bytes

- catdoc конвертер MS Word в текст. Home page, также указан на Freshmeat

      indexer.conf: Mime application/msword  text/plain  "catdoc $1"

- xls2csv конвертор MS Excel в текст. Поставляется в пакете catdoc.

      indexer.conf: Mime application/vnd.ms-excel text/plain "xls2csv $1"

- pdftotext конвертор Adobe PDF в текст. Поставляется в пакете xpdf. Homepage, также указан на Freshmeat

      indexer.conf: Mime application/pdf text/plain "pdftotext $1 -"

- unrtf конвертор RTF в html. Homepage

      indexer.conf:
      Mime text/rtf*        text/html "/usr/local/dpsearch/sbin/unrtf --html $1
      Mime application/rtf  text/html "/usr/local/dpsearch/sbin/unrtf --html $1

- xlhtml конверотор XLS в html

  Homepage

  `indexer.conf`:

      Mime	application/vnd.ms-excel  text/html  "/usr/local/dpsearch/sbin/xlhtml $1"

- ppthtml Конвертор PowerPoint (PPT) в html. Часть проекта xlhtml 0.5.

  Homepage

  `indexer.conf`:

      Mime	application/vnd.ms-powerpoint  text/html  "/usr/local/dpsearch/sbin/ppthtml $1"

- Использование vwHtml Конвертор MS Word (DOC) в html.

  `/usr/local/dpsearch/sbin/0vwHtml.pl`:

      #!/usr/bin/perl -w

      $p = $ARGV[1];
      $f = $ARGV[1];

      $p =~ s/(.*)\/([^\/]*)/$1\//;
      $f =~ s/(.*)\/([^\/]*)/$2/;

      system("/usr/local/bin/wvHtml --targetdir=$p $ARGV[0] $f");

  `indexer.conf`:

      Mime  application/msword       text/html  "/usr/local/dpsearch/sbin/0wvHtml.pl $1 $2"
      Mime  application/vnd.ms-word  text/html  "/usr/local/dpsearch/sbin/0wvHtml.pl $1 $2"

- swf2html из Flash Search Engine SDK

  `indexer.conf`:

      Mime  application/x-shockwave-flash  text/html  "/usr/local/dpsearch/sbin/swf2html $1"

- djvutxt из djvuLibre

  `indexer.conf`:

      Mime  image/djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"
      Mime  image/x.djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"
      Mime  image/x-djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"
      Mime  image/vnd.djvu  text/plain  "/usr/local/bin/djvutxt $1 $2"

Пожалуйста, присылайте Ваши скрипты и конфигурации для новых парсеров на адрес `<dataparksearch@datapark.ru>`.

Пред. | Начало | След.
ServerTable | Уровень выше | Остальные команды, используемые в `indexer.conf`