e-Books: полнотекстовый поиск по книгам

Самое время заняться поиском по книгам. Предполагается,  что поисковик MSN Desktop Search уже установлен. Если нет — бегом на http://desktop.msn.com и скачиваем поисковик.

Итак, предполагается, что поисковик уже установлен. MSN Desktop Search производит сбор информации о различных файлах, анализируя каждый тип файла с помощью специально для этого назначенного дополнения, так называемого IFilter. Стандартно, установлены фильтры для офисных документов, текстов и т.п. Список IFilter можно значительно расширить (и тем самым значительно усилить возможности поиска). Идем на сайт http://www.citeknet.com/ и скачиваем все доступные фильтры. Они пока бесплатны. Кроме того, вот еще подборка IFilter’ов: http://channel9.msdn.com/wiki/default.aspx/Channel9.DesktopSearchIFilters

Теперь наш поисковик умеет искать в том числе и в zip архивах. Осталось научить его искать файлы FB2. К сожалению, IFilter для FB2 пока не существует, но поскольку FB2 — это XML файл, можно довольно просто заставить его индексироваться.

Для этого открываем редактор реестра, находим раздел
HKEY_CLASSES_ROOT.fb2
И создаем в этом разделе еще один раздел с именем
PersistentHandler:

HKEY_CLASSES_ROOT.fb2PersistentHandler

Значением по умолчанию для этого раздела нужно вписать строчку:
{7E9D8D44-6926-426F-AA2B-217A819A5CCE}

Этим самым мы привяжем расширение файлов FB2 к обработчику IFilter XML. Все! Наши книги уже могут индексироваться!

Правда, есть один маленький нюанс…

Нормальный поиск по книгам FB2

К сожалению, IFilter Microsoft, который ищет XML, нормально индексирует только Юникод-кодировку :( Большинство же книг записаны в кодировке Windows-1251, и поэтому поиск по русскому тексту невозможен. (С латиницей проблем нет) Можно, конечно же, поставить другой IFilter, например, http://www.quilogic.cc/order.htm — но он стоит денег, причем немалых! Вообще, это жлобство, брать $100 за паршивую библиотечку поиска!

Поэтому, сейчас проще просто перекодировать файлы в UTF-8. Конечно же, первое что приходит на ум — это воспользоваться какой-нибудь программкой. Но, по крайней мере, пока мне такая программка сейчас не известна. Александр Шабаршов, автор Book2Shelf, как то говорил в форуме, что можно сделать такой модуль в Book2Shelf, но потом, в будущем. Самому писать конверталку, тоже как то времени нет. Поэтому я пока конвертирую файлы руками. И примерно вот так:

Открываем книгу FB2 блокнотом. Смотрим в первую строчку:
<?xml version="1.0" encoding="windows-1251"?>

Надо руками вписать следующее:
<?xml version="1.0" encoding="utf-8"?>
и пересохраняем книгу (File —> Save As). При сохранении в диалоге выбираем тип кодировки UTF-8 (НЕ ЗАБЫТЬ УКАЗАТЬ КОДИРОВКУ!!!). И закрываем блокнот.

Все! Если мы сделали все правильно — книга сохранена в кодировке UTF-8 и русский текст будет искаться как из пушки!

Есть, правда, еще одна проблемка. Если при добавлении такой, конвертированной книги в Book2Shelf возникнет сообщение — "Не могу определить тип файла", то это глючит Book2Shelf. Дело в том, что блокнот при сохранении текста в UTF-8 вписывает в начало файла три байта, как маркер кодировки: EF BB BF. И это правильно:
http://www.opentag.com/xfaq_enc.htm

Эти байты в UTF-8 — неразрывный пробел нулевой ширины, поэтому влияния на текст они не оказывают, но сообщают другим программам, что использовалась UTF-8.
http://wdh.suncloud.ru/unicode.htm

Как ни странно, B2S глючит при анализе этих байтов. Я сообщал это автору (http://narod.yandex.ru/userforum/message.xhtml?owner=unclshura&message_id=3142901&thread_id=3142517
), и тот клятвенно утверждает, что эта ошибка давно исправлена, но тем не менее, я на нее нарывался и в самых свежих версиях программы B2S. Для решения проблемы их можно просто удалить, но не блокнотом, а, например, редактором FAR. Откройте файл редактором FAR (F4) и просто сотрите символы п>ї в самом начале файла- это и есть те самые байты. Все!

Через некоторое время, когда поисковик найдет новые книги (от нескольких сек, до мин) — вы можете попробовать их поискать:

Один комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *