9/21/2009

Научная поисковая система на вашем Linux-десктопе

Некоторое время назад я писал о SWISH++, и вот теперь мне хотелось бы обобщить написанное в более краткой форме. Проблема поиска нужной статьи, если не помнишь точно где она находится в каталогах, действительно серьёзная.


1. Поиск дубликатов
Итак, когда я накачал нужных мне статей из Интернета, я прежде всего смотрю, есть ли они у меня в коллекции с помощью fdupes. Эта программа ищет дубликаты файлов:
$ fdupes -rd .
Точка в конце говорит о том, что искать дубликаты fdupes будет, начиная с текущего каталога, поэтому можно в каталоге со статьями сделать подкаталог 1/ и набросать туда скачанные статьи.

Fdupes сравнивает файлы как побайтово, так и с помощью подсчёта md5-суммы, работает невероятно быстро, сортировка производится в полуавтоматическом режиме: программа выводит в консоли дублирующиеся файлы и спрашивает, какой из них оставить. Об этом уже говорилось в статье о подходах к сортировке PDF-файлов.


2. Индексация текста в PDF-файлах
Сначала из
документов pdf вытаскиваем текст, для чего просим утилиту find найти все файлы PDF и для каждого найденного выполнить pdftotext без выдачи предупреждений и без вставки символов разрыва страницы:
find -name '*.pdf' -exec pdftotext -nopgbrk -q {} \;
Надо отметить, что pdftotext хорошо работает только для английского языка, на котором, в общем, все статьи и написаны.

Теперь индексируем все текстовые файлы - в этом нам поможет собрат SWISH++ по имени index++ для индексации текстовых файлов:
index++ -e "text:*.txt" .
Точка в конце означает, что поиск ведётся с текущего каталога. Подробнее об индексации и автоматизации этого процесса сказано здесь.

В результате в текущем каталоге появится файл swish++.index где, собственно, лежит информация об индексировани файлов. Теперь всё готово для поиска.


3. Ищем в архиве статей нужное
Для поиска используем search++ которая найдёт по нашему запросу в индексированной базе swish++.index файлы. Вот пример поиска статьи по математической морфологии, в которых нет упоминания про медицину:
$ search++ morphology and erosion and dilation not medicine
Мгновение спустя вижу результат (вывод сокращён):
# results: 125
99 ./Krylov2.txt 3771 Krylov2.txt
49 ./13300407.txt 3103 13300407.txt
46 ./morph1.slides.printing.6.txt 4369 morph1.slides.printing.6.txt
37 ./lecture_morphology_sara.txt 6746 lecture_morphology_sara.txt
30 ./SIGGRAPH2002_Sketch-Mitchell.txt 5308 SIGGRAPH2002_Sketch-Mitchell.txt
26 ./MorphologicalImageProcessing.txt 7642 MorphologicalImageProcessing.txt
25 ./phdsymp2002_ledda.txt 8298 phdsymp2002_ledda.txt
23 ./lab2_manual.txt 9313 lab2_manual.txt
23 ./Project 1.txt 9946 Project 1.txt
22 ./morphology.txt 11212 morphology.txt
22 ./edg/morphology.txt 11212 morphology.txt
22 ./slides-6-geometry.txt 11717 slides-6-geometry.txt
22 ./V1BFOGG8.txt 10797 V1BFOGG8.txt
18 ./71650638.txt 13978 71650638.txt
Первая колонка - релевантность, вторая - расположение файла относительно текущей директории, третья - размер файла, четвёртая - имя. Просто и понятно.

Теперь в консольке набираю kdpf
./Krylov2.pdf и смотрю нужную мне статью. И всё.

Ссылки
Собственно, документации о SWISH++ очень мало, так что в основном я решил собрать свои предыдущие записи в один пост:
- поиск и удаление дубликатов файлов с помощью fdupes;
- выделение текста из PDF-файлов и их индексация;
- поиск в индексированных файлах с помощью SWISH++

10 комментариев:

  1. а почему бы для этого просто beagle не использовать?

    ОтветитьУдалить
  2. Я уже довольно давно отказался от хранения статей на локальной машине, все заливаю в citeulike.org . Тут тебе и bib файл сразу создадут и pdf дадут загрузить котоый будет доступен из любого места где есть интернет. Недавно появились рекомендации, забавная фича )
    Единственно там нет полнотекстового поиска по всей статье, но посика по тексту Абстракта обычно хватает.

    ОтветитьУдалить
  3. кхм. Очень похоже на функционал zotero

    ОтветитьУдалить
  4. @ lizardie комментирует...
    а почему бы для этого просто beagle не использовать?
    Он слишком здоровый для этого. Мне хотелось найти маленькое и изящное решение. И я его нашёл :-)

    @Magik комментирует...
    Я уже довольно давно отказался от хранения статей на локальной машине
    Потому, что в твоих буржуйских палестинах интернет быстр и дешёв, чего про наши медвежьи края не скажешь :-)


    все заливаю в citeulike.org
    О! Спасибо, Коля, я про это не знал!

    Тут тебе и bib файл сразу создадут и pdf дадут загрузить котоый будет доступен из любого места где есть интернет.
    Клаааассссс! :-) А мне редакция журнала по голове не настучит за это?

    Единственно там нет полнотекстового поиска по всей статье, но посика по тексту Абстракта обычно хватает.
    У меня довольно много статей, материал которых иногда бывает нужен, а я забываю, куда их бросил. SWISH++ в этом деле незаменим.

    ЗА citeluke огромнейшее спасибо! У них там, кстати, сколько места под PDF-ы есть?

    @antalar комментирует...
    кхм. Очень похоже на функционал zotero
    Если речь идёт о плагине для файрфокс - то нет. Здесь индексация по всему тексту статьи в PDF. То есть когда мы нашли нужную нам статью, открываем её и читаем.

    ОтветитьУдалить
  5. А мне редакция журнала по голове не настучит за это?
    Не не настучит ) Это твоя персональная копия, ты не можешь ее расшаривать с другими участниками. Вообще не так давно citeulike взял под крыло Шпрингер, так что издательства только за )
    У них там, кстати, сколько места под PDF-ы есть?
    Я так понимаю сколько хош столько и есть ) Я ни разу еще не встречался с какими либо ограничениями )

    Едиснтвенно я не проверял как сайт работает с русскими статьями, возможно там есть проблемы.

    ОтветитьУдалить
  6. Google desktop возможно даже тяжелее Beagle, но зато никогда не давал сбоя. Хранение же файлов на citeulike не позволяет делать пометки в PDF файлах с помощью okular.

    ОтветитьУдалить
  7. А почему не swish-e?
    Я swish++ не пользовался, а вот swish-e раньше использовал. Потом пришёл к выводу что это механизм с большим количеством телодвижений и просто установил tracker.

    Кстати, по поводу аннотаций в Okular - очень очень очень хочу что-то такое же всеядное и позволяющее делать пометки, не завязанное на KDE. Может быть есть что-то такое, ну например для GTK или QT, или пусть на гномо-либах завязанное (все равно стоят)? Пусть не всеядное, хоть для pdf бы.

    ОтветитьУдалить
  8. Но ведь это только для английского языка, да?

    ОтветитьУдалить
  9. @ max5555 комментирует...
    Хранение же файлов на citeulike не позволяет делать пометки в PDF файлах с помощью okular.
    Обновлюсь на Ленни (или сквизи, когда выйдет) специально ради okular. Не собирается у меня под этчем...

    А идея SWISH++ в том, чтобы искать локально.

    @Pavel Vyazovoi комментирует...
    А почему не swish-e?
    Его, swish-e, переработали и сильно улучшили. Решил использовать именно его.

    Кстати, по поводу аннотаций в Okular - очень очень очень хочу что-то такое же всеядное и позволяющее делать пометки
    Это да, этого очень и очень сильно мне не хватает.

    @асоциальный психопат комментирует...
    Но ведь это только для английского языка, да?
    Да, ибо все нормальные научные статьи написаны именно на английском языке.

    ОтветитьУдалить
  10. А мне очень понравился для этих целей Mendeley Desctop. ПДФы хранятся локально и могут синхронизироваться с веб-аккаунтом (бесплатный лимит 500Мб). Приложение для дебиана очень юзабельно, может оформлять цитирование по госту. И умеет синхронизироваться с citulike.

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