ПРОЕКТЫ 


  АРХИВ 


  СТАТЬИ 


Антиспам-технологии 

Internet, WWW, UNIX 

Фото 

  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     СТАТЬИ :: Internet, WWW, UNIX

Как обустроить ht://Dig

Всякий, кто создает развесистые русскоязычные WWW-серверы рано или поздно сталкивается с проблемой организации поиска по ним. К сожалению, выбор до сих пор невелик - Yandex стоит денег (есть lite-версия, но с очень ограниченным объемом данных), с Rustem/rwww может справиться только его создатель, glimpse не понимает русской морфологии. Остаются UDMSearch и ht://Dig. Несмотря на то, что UDMSearch хвалят больше, сам я по привычке продолжаю использовать ht://Dig. Этот продукт не лишен недостатков, но после приложения некоторых усилий его таки можно использовать. Основное преимущество этой программы перед glimpse - это возможность использования словарей от ispell для генерации словоформ (склонений, спряжений и так далее). Естественно, это умеют и Yandex и Rustem, но прочие недостатки у них перевешивают это достоинство.

Приборы и материалы

Чтобы поставить ht://Dig, нам понадобится сама эта программа (берется с http://www.htdig.org и русские словари. Я рекомендую использовать словарь Александра Лебедева (берут с ftp://mch5.chem.msu.su/pub/russian/ispell/), т.к. словарь Владимира Роганова и Константина Книжника (второй из известных мне словарей для ispell) строит достаточно странные словоформы, пригодные для интерактивной проверки правописания, но непригодные, на мой взгляд, для автоматической генерации полного списка русских слов.

Инсталляция

Все написанное ниже относится к ht://Dig версии 3.1.5 и русскому словарю Лебедева версии 0.99c9. Более новые версии могут уже не содержать встреченных мной проблем. А проблемы эти таковы:
  1. htfuzzy (программа построения полного списка слов по словарю) предназначена для обработки ровно одного словаря. Если хочется использовать, например, и русский и английский, то этот недостаток нужно устранить.
  2. Словарь Лебедева (точнее, .aff-файл) предназначен для ispell и содержит конструкции вида
    	У Т Ь > -ТЬ,-       # гнуть > гну
    	
    Что, наверное, совершенно правильно для ispell, но для htfuzzy это правило должно выглядеть как
    	У Т Ь > -ТЬ,        # гнуть > гну
    	
    т.е. нужно заменить конструкции ",- " на просто запятую.
  3. htsearch выдает абсолютную ссылку на проиндексированный документ (с именем WWW-сервера и портом, если он отличен от 80). При использовании Russian Apache с заданием кодировки в URL (по портам, по имени сервера и так далее) это неудобно - если клиент работает в кодировке, отличной от кодировки индексирования, то все ссылки на результаты поиска будут выданы ему не в его кодировке, а в кодировке, в которой производилось индексирование.
Как водится, пришлось править по живому в результате чего возник такой набор патчей:
  • Этот патч запрещает htfuzzy переносить файлы базы данных словоформ из $TMPDIR (или /tmp) в ..../htdig/common. Соответственно, при последовательном запуске htfuzzy с разными исходными словарями база данных будет дописана.
  • Этот патч к htsearch удаляет префикс http://server:port из всех URL'ей, начинающихся с HTTP.
    Внимание. Автоматически исчезает возможность индексировать несколько серверов!. Если нужен поиск по нескольким серверам, то проще всего, вероятно, индексировать URL'и с автоматическим выбором кодировки, тогда при обращении пользователя по ссылке с "результатов поиска" сервер (подразумевается использование Russian Apache) перекодирует все в кодировку клиента автоматически.
  • Этот патч выключает кодирование запроса в виде %AA-кодов в ссылках на "другие страницы с найденными документами".
Для тех, кому нужны все эти правки сразу, есть общий патч, объединяющий все 3 вышеописанных. Понадобятся исправления в файле описания русских аффиксов (хотел бы я знать правильное слово). Патч к версии 0.99c9 словаря Лебедева можно взять здесь.. Если не хочется патчить, то можно взять файл окончаний целиком. htdig стоит распаковать, наложить патчи и поставить. В предположении, что htdig будет жить в /export/htdig, а файлы Apache живут в /export/apache, последовательность действий будет выглядеть как-то так:
     tar xzvf /path/to/htdig-3.1.5.tar.gz
     patch -p0 < /path/to/htdig.patch
     cd htdig-3.1.5

    ./configure --prefix=/export/htdig --exec-prefix=/export/htdig        --with-cgi-bin-dir=/export/apache/cgi-bin        --with-image-dir=/export/apache/htdocs/images        --with-search-dir=/export/apache/htdocs/search 
     make
     su root 
     make install
    
Если вы не правили файл конфигурации (CONFIG) и не задавали --prefix для configure, то все будет поставлено в /opt/www. Если правили, то туда, куда вы указали. В дальнейшем я предполагаю, что все установлено в /export/htdig

Теперь следует сделать русский словарь:

	mkdir dict
	cd dict
	tar xzvf /path/to/rus-ispell-0.99c9.tar.gz
	make russian.dict russian.aff
	patch </path/to/russian.aff.patch
	cp russian.aff russian.dict /export/htdig/common
    

Генерация баз данных со словарями

мы уже внесли, остаток работы можно сделать таким вот скриптом (он написан в предположении, что russian.aff и russian.dict уже находятся в /export/htdig/common, а файлы со словарями называются в htdig.conf words.aff и words.diff:
endings_affix_file:	/export/htdig/common/words.aff
endings_dictionary:	/export/htdig/common/words.dict
    
Скрипт выглядит как-то так:
#!/bin/sh
cd /export/group/htdig/common
mkdir ../tmp
TMPDIR=/export/group/htdig/tmp
export TMPDIR
rm $TMPDIR/*
cp english.aff words.aff
cp english.0 words.dict
../bin/htfuzzy -v endings
cp russian.aff words.aff
cp russian.dict words.dict
../bin/htfuzzy -v  endings 
mv $TMPDIR/*db /export/group/htdig/common
    

Обработка словарей занимает несколько минут Pentium-III 550.

На этом подготовительный этап можно считать оконченным, запускать htdig/htmerge и использовать поиск. Конфигурационный файл у ht://Dig может быть, например таким.

Для индексирования нескольких сайтов с разными кодировками можно использовать правки Сергея Парфенова.


 




Copyright © Lexa Software, 1996-2009.