dersblog

Lokal Dosya Arama - recoll

Kendi diskimizdeki dosyalari, PDF, EPUB, ne olursa olsun, indeksleyebilmemizi saglayan recoll araci var. Kurmak icin

sudo apt-get install recoll

Komutta recoll yazılınca GUI açılır. Preferences | Indexing configuration ile indekslenecek dizinler eklenebilir, çıkartılabilir. Komut satırından indeksleme için recollindex çağrısı yeterli. Ben tipik olarak bir kitaplar üst dizinini veriyorum, ve oraya yeni doküman eklendikçe arada sırada recollindex çağrısı yapıp indeksi güncelliyorum.

Doküman bulmak için recoll GUI'sinde kutuya istenen kelimeler yazılır ve sonuçlar altta listelenir.

Komut Satırından Aramak

Direk komut satırından arama için recoll -t çağrısı ardından anahtar kelimeler verilir, ve sonuç listelenebilir. Bu çağrıyı sarmalayan basit bir Python script alttadır,

import subprocess, re, sys
q = "kelime"
p = subprocess.Popen(['recoll','-t',q], stdout=subprocess.PIPE)
for line in p.stdout:
    res = re.findall('\[file:\/\/(.*?)\]', str(line), re.DOTALL)
    print (res)
    if (len(res)>0):
        print ("%s:1:1" % res[0])

Fakat bu çıktıdan arama sonucunu temsil eden özet paragraflar çıkartmak zor olabilir.

Bir diğer yöntem recoll yazılımının kendi kaynağı içindeki Python kodlarını bir Python paketi olarak kurmak. Fakat bunu için tüm recoll kodunu almak ve derlemek gerekiyor.

Kaynaklar [1] adresinde, kurulus tarifi [2]. Onceden bazi paketleri kurmak lazim, bizim uyguladigimiz komutlar,

sudo apt install libxslt1-dev zlib1g-dev libxapian-dev libx11-dev libaspell-dev

Ardından recoll açılmış zip dizinine gidilir, ve

./configure --disable-qtgui --disable-python-chm

Bu bir Makefile hazırlayacak, aynı zamanda Python paketini de kurulmaya hazır hale getirecek. Eğer tüm recoll bu kaynaktan gelsin istiyorsak

make
sudo make install

ile kurulumu yapabiliriz.

Bu bittikten sonra recoll --version ile yeni kurulum yapıldığını kontrol ederiz, şimdi sıra Python'a geldi. Alt dizin python/recoll altında şimdi bir setup.py dosyası olmalı. Yanlız dikkat: bu dosyayı yazanlar kodu biraz eksik bırakmış, mesela virtualenv gibi geliştirme ortamı kullananlar ortamlarına girip hangi setup.py üzerinde install işletirlerse o kurulumun içinde olduğu ortamın parçası olmasını beklerler. Bu arkadaşlar böyle yapmamış, tüm hazırlığı sistem seviyesindeki Python için yapmışlar.

O sebeple eğer bir virtualenv ortamındaysak mesela deactivate ile dışarı çıkıyoruz, ve oradan eski usul, ilk Python öğrendiğimiz emekleme günlerinde olduğu gibi haldır huldur bir sudo python3 setup.py install işletiyoruz. Bu komut kurulumu sistem seviyesinde yapacaktır. Şimdi eğer bu paketi geliştirme ortamından kullanmak istersek bir takla atarak sistem Python'undaki recoll'dan geliştirme ortamına bir sembolik bağlantı oluşturmak yeterli. Mesela ben kendi env3 adındaki ortamımın dizini env3/lib/python3.6/site-packages altında

/usr/local/lib/python3.6/dist-packages/Recoll-1.32.7-py3.6-linux-x86_64.egg/recoll

adresini gösteren bir recoll sembolik bağlantısı yarattım, ve her şey ortam içinden normal şekilde çalışmaya başladı. Not: üstteki dizin herkes için aynı olmayabilir, mesela python3.6 yerine başka bir dizin olabilir, bunu kontrol etmek gerekebilir.

Bu paketi kullanan bir kodu altta görebiliriz, bir kelime arayıp ilk 5 sonucu özetleriyle beraber gösteriyor.

from recoll import recoll
db = recoll.connect()
db.setAbstractParams(maxchars=300, contextwords=4)
q = "kelime"
query = db.query()
nres = query.execute(q)
print("Result count: %d" % nres)
for i in range(5):
    doc = query.fetchone()
    print("Result #%d" % (query.rownumber))
    for k in ("title", "size", "url"):
        print("%s : %s" % (k, getattr(doc, k)))
    print("%s\n" % db.makeDocAbstract(doc, query))

Kaynaklar

[1] [LesBonsComptes Download](https://www.lesbonscomptes.com/recoll/pages/download.html)

[2] [LesBonsComptes Install](https://www.lesbonscomptes.com/recoll/usermanual/usermanual.html#RCL.INSTALL)


Yukarı