Ключевые слова:search, howto, rus, spell, web, (найти похожие документы) From : Alex Tutubalin <lexa@home.lexa.ru>
Subj : Как обустроить ht://Dig (c) http://www.lexa.ru
-------------------------------------------------------------------------------
<b>(c) http://www.lexa.ru</b>
<h2 align=center>Как обустроить <a href="http://www.htdig.org">ht://Dig</a></h2>
Всякий, кто создает развесистые русскоязычные WWW-серверы рано или поздно сталкивается
с проблемой организации поиска по ним. К сожалению, выбор до сих пор невелик -
<a href="http://www.comptek.ru">Yandex</a> стоит денег (есть lite-версия, но с очень
ограниченным объемом данных), с
<a href="http://www.openweb.ru/~dvd/rustem/rustem.html">Rustem/rwww</a> может справиться
только его <a href="http://www.openweb.ru/~dvd/">создатель</a>,
<b>glimpse</b> не понимает русской морфологии.
Остаются <a href="http://mysearch.udm.net">UDMSearch</a> и
<a href="http://www.htdig.org">ht://Dig</a>. Несмотря на то, что
<code>UDMSearch</code> хвалят больше, сам я по привычке продолжаю
использовать <code>ht://Dig</code>. Этот продукт не лишен
недостатков, но после приложения некоторых усилий его таки можно использовать.
Основное преимущество этой программы перед glimpse - это возможность использования
словарей от ispell для генерации словоформ (склонений, спряжений и так далее).
Естественно, это умеют и <b>Yandex</b> и <b>Rustem</b>, но прочие недостатки у
них перевешивают это достоинство.
<h3 align=center>Приборы и материалы</h3>
Чтобы поставить ht://Dig, нам понадобится сама эта программа (берется с
<a href="http://www.htdig.org">http://www.htdig.org</a> и русские словари.
Я рекомендую использовать словарь <a href="mailto:swan@mch.chem.msu.su">Александра Лебедева</a>
(берут с
<a href="ftp://mch5.chem.msu.su/pub/russian/ispell/">ftp://mch5.chem.msu.su/pub/russian/ispell/</a>),
т.к. словарь Владимира Роганова и Константина Книжника (второй из известных
мне словарей для ispell) строит достаточно странные словоформы, пригодные для
интерактивной проверки правописания, но непригодные, на мой взгляд, для автоматической
генерации полного списка русских слов.
<h3 align=center>Инсталляция</h3>
Все написанное ниже относится к ht://Dig версии 3.1.5 и русскому словарю Лебедева
версии 0.99c9. Более новые версии могут уже не содержать
встреченных мной проблем.
А проблемы эти таковы:
<ol>
<li><b>htfuzzy</b> (программа построения полного списка слов по
словарю) предназначена для обработки ровно одного словаря. Если
хочется использовать, например, и русский и английский, то этот
недостаток нужно устранить.
<li><b>Словарь Лебедева</b> (точнее, .aff-файл) предназначен для ispell и
содержит конструкции вида
<pre>
У Т Ь > -ТЬ,- # гнуть > гну
</pre>
Что, наверное, совершенно правильно для ispell, но для htfuzzy это правило
должно выглядеть как
<pre>
У Т Ь > -ТЬ, # гнуть > гну
</pre>
т.е. нужно заменить конструкции ",- " на просто запятую.
<li><b>htsearch</b> выдает абсолютную ссылку на проиндексированный документ (с именем
WWW-сервера и портом, если он отличен от 80). При использовании
<a href="http://apache.lexa.ru">Russian Apache</a> с заданием кодировки в URL
(по портам, по имени сервера и так далее) это неудобно - если клиент работает
в кодировке, отличной от кодировки индексирования, то все ссылки на результаты
поиска будут выданы ему не в его кодировке, а в кодировке, в которой производилось
индексирование.
</ol>
Как водится, пришлось править по живому в результате чего возник такой набор патчей:
<ul>
<li><a href="htdig.patch1">Этот патч</a> запрещает htfuzzy переносить
файлы базы данных словоформ из $TMPDIR (или /tmp) в
..../htdig/common. Соответственно, при последовательном запуске
htfuzzy с разными исходными словарями база данных будет дописана.
<li><a href="htdig.patch2">Этот патч к htsearch</a> удаляет префикс http://server:port из
всех URL'ей, начинающихся с HTTP.<br>
<b>Внимание</b>. Автоматически исчезает возможность индексировать несколько серверов!.
Если нужен поиск по нескольким серверам, то проще всего, вероятно, индексировать URL'и
с автоматическим выбором кодировки, тогда при обращении пользователя по ссылке с
<b>"результатов поиска"</b> сервер (подразумевается
использование Russian Apache) перекодирует все в кодировку
клиента автоматически.
<li><a href="htdig.patch3">Этот патч</a> выключает кодирование запроса в виде %AA-кодов в
ссылках на "другие страницы с найденными документами".
</ul>
Для тех, кому нужны все эти правки сразу, есть <a href="htdig.patch">общий патч</a>,
объединяющий все 3 вышеописанных.
Понадобятся исправления в файле описания русских аффиксов (хотел бы я знать правильное слово).
Патч к версии 0.99c9 словаря Лебедева можно взять
<a href="russian.aff.patch">здесь.</a>. Если не хочется патчить, то можно взять
<a href="russian.aff">файл окончаний целиком</a>.
htdig стоит распаковать, наложить патчи и поставить. В
предположении, что htdig будет жить в /export/htdig, а файлы
Apache живут в /export/apache, последовательность действий будет
выглядеть как-то так:
<pre>
tar xzvf /path/to/htdig-3.1.5.tar.gz
patch -p0 < /path/to/<a href="htdig.patch">htdig.patch</a>
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
</pre>
Если вы не правили файл конфигурации (CONFIG) и не задавали --prefix для configure,
то все будет поставлено в /opt/www. Если правили, то туда, куда
вы указали. В дальнейшем я предполагаю, что все установлено в /export/htdig<p>
Теперь следует сделать русский словарь:
<pre>
mkdir dict
cd dict
tar xzvf /path/to/rus-ispell-0.99c9.tar.gz
make russian.dict russian.aff
patch </path/to/<a href="russian.aff.patch">russian.aff.patch</A>
cp russian.aff russian.dict /export/htdig/common
</pre>
<h3 align=center> Генерация баз данных со словарями</h3>
мы уже внесли, остаток работы можно сделать таким вот <a href="runfuzzy.sh">скриптом</a>
(он написан в предположении, что russian.aff и russian.dict уже находятся в
/export/htdig/common,
а файлы со словарями называются в htdig.conf words.aff и words.diff:
<pre>
endings_affix_file: /export/htdig/common/words.aff
endings_dictionary: /export/htdig/common/words.dict
</pre>
Скрипт выглядит как-то так:
<pre>
#!/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
</pre>
<p>
Обработка словарей занимает несколько минут Pentium-III 550. <p>
На этом подготовительный этап можно считать оконченным, запускать htdig/htmerge и
использовать поиск. Конфигурационный файл у ht://Dig может быть, например
<a href="htdig.conf">таким</a>.
<p>
Для индексирования нескольких сайтов с разными кодировками можно
использовать <a href="http://www.tms.ru/~sergey/htdig/">правки Сергея
Парфенова</a>.