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

    /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"
    

Пожалуйста, присылайте Ваши скрипты и конфигурации для новых парсеров на адрес .


Geo Visitors Map who's online