10/16/2006

Разбор завала документов: мысли, идеи, подходы

В предыдущих статьях по этой теме говорилось о применении программы SWISH++ для быстрой сортировки pdf-документов, а в этом посте приводились некоторые конкретные решения этого вопроса. Есть ещё несколько вопросов и идей насчёт разгребания завала документов.

Какие ещё завалы можно разобрать?
Теоретически любые, которые так или иначе сводятся к обработке текста. Если немного напрячь фантазию и порыться в репозитории, то можно таким же (или очень сходным манером) разгрести горы:
- скачанных HTML-страниц. Тут меня терзают смутные желания по поводу установки полновесного поискового движка mnogosearch, который под такие цели и заточен. Однако он потянет за собой Апача, который мне совсем не нужен;
- офисных документов. Здесь выруливает ОпенОфис, так как его документы - фактически сжатый XML, но можно поискать счастья и с вордовыми документами, для чего имеется программа antiword;
- тэгов в mp3/ogg - файлах. Если вы утруждаете себя их заполнением, то проблема поиска в этом случае сильно упрощается - SWISH++ их поддерживает изначально;
- документов LaTeX. То же самое: так как это фактически размеченный плоский текст, то проблем не возникает. Конечно, если они все на английском;
- простых плоских текстов. Например, у меня огромная библиотека художественной литературы в сжатой файловой системе SquashFS - индексирую её, индекс сохраняю там же, потом монтирую и прямо в сжатой файловой системе провожу поиск;
- pdf-файлов. Ну, про это я уже уши прожужжал :-) Накачал кучу статей по специальности, надо бы отсортировать. Не руками же, в самом деле.
Поиск и удаление дубликатов
Это то, что я не осветил в тех постах. Часто от жадности скачиваю сразу всё, а потом выясняется, что часть файлов у меня уже есть. Как их найти и потереть во всём многообразии уже имеющихся документов?
Ленивые линуксоиды должны были что-то придумать на этот счёт - придумать и включить в Дебиан. Так и есть: в репозитории ищем и находим очаровательную утилиту fdupes. Она сравнивает файлы как побайтово, так и с помощью подсчёта md5-суммы при том, что занимает какие-то пару сотен килобайт. Работает невероятно быстро, сортировка производится в полуавтоматическом режиме: программа выводит в консоли дублирующиеся файлы и спрашивает, какой из них оставить. Вот как это выглядит:

penta4@penta4rce:~$ fdupes -r -d /mnt/wd250Gb/my/matlab/Study/Statii/ImageProcessing/
[1] /mnt/wd250Gb/my/matlab/Study/Statii/ImageProcessing/Algorythms/Linear/Gabor/jei_2005.pdf
[2] /mnt/wd250Gb/my/matlab/Study/Statii/ImageProcessing/Algorythms/Linear/Gabor/jei_2004.pdf

Set 1 of 1, preserve files [1 - 2, all]:
Отвечаем, какие файлы оставить - остальные программа сразу снесёт. Будьте внимательны: восстановить их потом будет нелегко, если вообще возможно. У программы много настроек, она умеет отличать жёсткие и мягкие ссылки, искать рекурсивно и так далее - man fdupes много чего интересного рассказывает.

Заключение
Приведённые соображения (главным образом по pdf-документам) должны помочь в ленивом и продуктивном решении такой непростой задачи. Если у кого есть мысли по этому поводу - буду очень рад услышать и увидеть их в комментариях. Они открыты для всех :-)

3 комментария:

  1. @virens:

    А что, html нельзя swish++ индексировать?
    По-моему, я видел у него в описании, что можно.

    Например, делаем индекс специально для html, ищем что-нибудь, из результатов поиска добываем имя файла с путем, и напускаем на него браузер.

    Правда, swish++ у меня не стоит, так что может я что-то и не понимаю.

    И насчет mnogosearch, сейчас посмотрел на mnogosearch-mysql, он не требует apache, и mnogosearch-common тоже.

    ОтветитьУдалить
  2. @ Roman Lagunov
    А что, html нельзя swish++ индексировать?
    Можно, конечно :-) Только я думаю, что поисковый движок для этого лучше заточен. А так легко - без проблем.

    Правда, swish++ у меня не стоит, так что может я что-то и не понимаю.
    Всё правильно вы понимаете, просто я не так часто ищу в html-файлах. SWISH++ занимает около 600 Кб, не отяготит :-)

    ОтветитьУдалить
  3. Учитывая, что SWISH++ работает только с English, русскоязычный пользователь можно только найти дубликаты.
    Ну или разобрать лишь англоязычный завал документов.

    ОтветитьУдалить