DataparkSearch Engine 4.53: Справочное руководство
Пред. | Глава 3. Индексирование | След.

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

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

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

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

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

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

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

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

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

## 3.9.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.9.3. Воизбежание зависания парсера при выполнении

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

    ParserTimeOut 600

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

## 3.9.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.9.5. Кодировки и парсеры

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

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

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

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

## 3.9.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>`.

## 3.9.8. Библиотека libextractor

DataparkSearch может быть собран с библиотекой libextractor. При помощи этой бибилиотеки DataparkSearch может индексировать ключевые слова из файлов следующих форматов: PDF, PS, OLE2 (DOC, XLS, PPT), OpenOffice (sxw), StarOffice (sdw), DVI, MAN, FLAC, MP3 (ID3v1 and ID3v2), NSF(E) (NES music), SID (C64 music), OGG, WAV, EXIV2, JPEG, GIF, PNG, TIFF, DEB, RPM, TAR(.GZ), ZIP, ELF, S3M (Scream Tracker 3), XM (eXtended Module), IT (Impulse Tracker), FLV, REAL, RIFF (AVI), MPEG, QT и ASF.

Чтобы собрать DataparkSearch с библиотекой libextractor, установите библиотеку, а затем сконфигурируйте и соберите DataparkSearch.

Ниже приводится соответствие между типами keyword в libextractor и именами секций DataparkSearch:

Таблица 3-1. Соответствие между типами keyword библиотеки libextractor и именами секций DataparkSearch

Тип Keyword | Имя секции
--- | ---
EXTRACTOR_FILENAME | Filename
EXTRACTOR_MIMETYPE | Mimetype
EXTRACTOR_TITLE | Title
EXTRACTOR_AUTHOR | Author
EXTRACTOR_ARTIST | Artist
EXTRACTOR_DESCRIPTION | Description
EXTRACTOR_COMMENT | Comment
EXTRACTOR_DATE | Date
EXTRACTOR_PUBLISHER | Publisher
EXTRACTOR_LANGUAGE | Content-Language
EXTRACTOR_ALBUM | Album
EXTRACTOR_GENRE | Genre
EXTRACTOR_LOCATION | Location
EXTRACTOR_VERSIONNUMBER | VersionNumber
EXTRACTOR_ORGANIZATION | Organization
EXTRACTOR_COPYRIGHT | Copyright
EXTRACTOR_SUBJECT | Subject
EXTRACTOR_KEYWORDS | Meta.Keywords
EXTRACTOR_CONTRIBUTOR | Contributor
EXTRACTOR_RESOURCE_TYPE | Resource-Type
EXTRACTOR_FORMAT | Format
EXTRACTOR_RESOURCE_IDENTIFIER | Resource-Idendifier
EXTRACTOR_SOURCE | Source
EXTRACTOR_RELATION | Relation
EXTRACTOR_COVERAGE | Coverage
EXTRACTOR_SOFTWARE | Software
EXTRACTOR_DISCLAIMER | Disclaimer
EXTRACTOR_WARNING | Warning
EXTRACTOR_TRANSLATED | Translated
EXTRACTOR_CREATION_DATE | Creation-Date
EXTRACTOR_MODIFICATION_DATE | Modification-Date
EXTRACTOR_CREATOR | Creator
EXTRACTOR_PRODUCER | Producer
EXTRACTOR_PAGE_COUNT | Page-Count
EXTRACTOR_PAGE_ORIENTATION | Page-Orientation
EXTRACTOR_PAPER_SIZE | Paper-Size
EXTRACTOR_USED_FONTS | Used-Fonts
EXTRACTOR_PAGE_ORDER | Page-Order
EXTRACTOR_CREATED_FOR | Created-For
EXTRACTOR_MAGNIFICATION | Magnification
EXTRACTOR_RELEASE | Release
EXTRACTOR_GROUP | Group
EXTRACTOR_SIZE | Size
EXTRACTOR_SUMMARY | Summary
EXTRACTOR_PACKAGER | Packager
EXTRACTOR_VENDOR | Vendor
EXTRACTOR_LICENSE | License
EXTRACTOR_DISTRIBUTION | Distribution
EXTRACTOR_BUILDHOST | BuildHost
EXTRACTOR_OS | OS
EXTRACTOR_DEPENDENCY | Dependency
EXTRACTOR_HASH_MD4 | Hash-MD4
EXTRACTOR_HASH_MD5 | Hash-MD5
EXTRACTOR_HASH_SHA0 | Hash-SHA0
EXTRACTOR_HASH_SHA1 | Hash-SHA1
EXTRACTOR_HASH_RMD160 | Hash-RMD160
EXTRACTOR_RESOLUTION | Resolution
EXTRACTOR_CATEGORY | Ext.Category
EXTRACTOR_BOOKTITLE | BookTitle
EXTRACTOR_PRIORITY | Priority
EXTRACTOR_CONFLICTS | Conflicts
EXTRACTOR_REPLACES | Replaces
EXTRACTOR_PROVIDES | Provides
EXTRACTOR_CONDUCTOR | Conductor
EXTRACTOR_INTERPRET | Interpret
EXTRACTOR_OWNER | Owner
EXTRACTOR_LYRICS | Lyrics
EXTRACTOR_MEDIA_TYPE | Media-Type
EXTRACTOR_CONTACT | Contact
EXTRACTOR_THUMBNAIL_DATA | Thumbnail-Data
EXTRACTOR_PUBLICATION_DATE | Publication-Date
EXTRACTOR_CAMERA_MAKE | Camera-Make
EXTRACTOR_CAMERA_MODEL | Camera-Model
EXTRACTOR_EXPOSURE | Exposure
EXTRACTOR_APERTURE | Aperture
EXTRACTOR_EXPOSURE_BIAS | Exposure-Bias
EXTRACTOR_FLASH | Flash
EXTRACTOR_FLASH_BIAS | Flash-Bias
EXTRACTOR_FOCAL_LENGTH | Focal-Length
EXTRACTOR_FOCAL_LENGTH_35MM | Focal-Length-35MM
EXTRACTOR_ISO_SPEED | ISO-Speed
EXTRACTOR_EXPOSURE_MODE | Exposure-Mode
EXTRACTOR_METERING_MODE | Metering-Mode
EXTRACTOR_MACRO_MODE | Macro-Mode
EXTRACTOR_IMAGE_QUALITY | Image-Quality
EXTRACTOR_WHITE_BALANCE | White-Balance
EXTRACTOR_ORIENTATION | Orientation
EXTRACTOR_TEMPLATE | Template
EXTRACTOR_SPLIT | Split
EXTRACTOR_PRODUCTVERSION | ProductVersion
EXTRACTOR_LAST_SAVED_BY | Last-Saved-By
EXTRACTOR_LAST_PRINTED | Last-Printed
EXTRACTOR_WORD_COUNT | Word-Count
EXTRACTOR_CHARACTER_COUNT | Character-Count
EXTRACTOR_TOTAL_EDITING_TIME | Total-Editing-Time
EXTRACTOR_THUMBNAILS | Thumbnails
EXTRACTOR_SECURITY | Security
EXTRACTOR_CREATED_BY_SOFTWARE | Created-By-Software
EXTRACTOR_MODIFIED_BY_SOFTWARE | Modified-By-Software
EXTRACTOR_REVISION_HISTORY | Revision-History
EXTRACTOR_LOWERCASE | Lowercase
EXTRACTOR_COMPANY | Company
EXTRACTOR_GENERATOR | Generator
EXTRACTOR_CHARACTER_SET | Meta-Charset
EXTRACTOR_LINE_COUNT | Line-Count
EXTRACTOR_PARAGRAPH_COUNT | Paragraph-Count
EXTRACTOR_EDITING_CYCLES | Editing-Cycles
EXTRACTOR_SCALE | Scale
EXTRACTOR_MANAGER | Manager
EXTRACTOR_MOVIE_DIRECTOR | Movie-Director
EXTRACTOR_DURATION | Duration
EXTRACTOR_INFORMATION | Information
EXTRACTOR_FULL_NAME | Full-Name
EXTRACTOR_CHAPTER | Chapter
EXTRACTOR_YEAR | Year
EXTRACTOR_LINK | Link
EXTRACTOR_MUSIC_CD_IDENTIFIER | Music-CD-Identifier
EXTRACTOR_PLAY_COUNTER | Play-Counter
EXTRACTOR_POPULARITY_METER | Popularity-Meter
EXTRACTOR_CONTENT_TYPE | Ext.Content-Type
EXTRACTOR_ENCODED_BY | Encoded-By
EXTRACTOR_TIME | Time
EXTRACTOR_MUSICIAN_CREDITS_LIST | Musician-Credits-List
EXTRACTOR_MOOD | Mood
EXTRACTOR_FORMAT_VERSION | Format-Version
EXTRACTOR_TELEVISION_SYSTEM | Television-System
EXTRACTOR_SONG_COUNT | Song-Count
EXTRACTOR_STARTING_SONG | Strting-Song
EXTRACTOR_HARDWARE_DEPENDENCY | Hardware-Dependency
EXTRACTOR_RIPPER | Ripper
EXTRACTOR_FILE_SIZE | File-Size
EXTRACTOR_TRACK_NUMBER | Track-Number
EXTRACTOR_ISRC | ISRC
EXTRACTOR_DISC_NUMBER | Disc-Number

Если секция из списка выше не указана в файле `sections.conf`, значение ключевого слова соответствующего типа будет записано как секция `body`. Тоже самое относится к ключевым словам неизвестно типа.

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