Иван 的个人资料Иван Никитин: мысли вслу...照片日志列表 工具 帮助
2005/4/3

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\.fb2\PersistentHandler

Значением по умолчанию для этого раздела нужно вписать строчку:
{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) и просто сотрите символы п>ї в самом начале файла- это и есть те самые байты. Все!

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

评论 (1)

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

Отлично!
5 月 4 日

引用通告

此日志的引用通告 URL 是:
http://ivan-nikitin.spaces.live.com/blog/cns!B1CBCA6B7D433991!139.trak
引用此项的网络日志