Affichage des articles dont le libellé est search engine. Afficher tous les articles
Affichage des articles dont le libellé est search engine. Afficher tous les articles

11/13/2010

Lucene et Jython

Au début, je souhaitais seulement tester un peu la technologie LUCENE : vous savez ce projet de la fondation APACHE, qui vous permet d'utiliser la même technologie que les grands moteurs de recherche sur Internet.  Je me suis dis que la meilleure solution était d'utiliser une bibliothèque python... comme pylucene... mais après 1H sur le site à regarder comment j'allais pouvoir faire fonctionner ce machin, je me suis dit : il faut laisser à JAVA ce qui appartient à JAVA... mais je ne voulais pas pour autant quitter le monde des pythoniens... ça tombe bien, d'autres personnes ont déjà fait ce chemin et ont créé un interpréteur python, qui fonctionne au dessus d'une JVM (Java Virtual Machine) et qui permet d'utiliser les bibliothèques JAVA : JYTHON.


Bon, il faut le dire, la documentation LUCENE est pas vraiment des plus explicite et il n'y a pas tant de code qui traine sur Internet... Bon, après une journée à me familiariser avec JYTHON et une autre à me familiariser avec LUCENE, j'ai fini par écrire un "indexer" :

import sys

# Add jars to classpath
jars = ["./lucene-core-3.0.2.jar"]

for jar in jars:
    sys.path.append(jar)

from org.apache.lucene.analysis.standard import *
from org.apache.lucene.index import *
from org.apache.lucene.store import *
from org.apache.lucene.util import *
from org.apache.lucene.document import Document, Field 


from java.io import File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;

import glob
import os

def listdirectory2file(path):
    l = glob.glob(path+"/*")
    for i in l:
        if os.path.isdir(i):
                print "Directory :"+i
                print listdirectory2file(i)
        else:
                print i
                indexfile(i)

def indexfile(filename):
    global writer
    f = open(filename, 'r')
    content = f.read()
    doc = Document () 
    doc.add(Field("name", filename, Field.Store.YES,Field.Index.ANALYZED))
    doc.add(Field("content", content, Field.Store.YES,Field.Index.ANALYZED))
    writer.addDocument(doc)

path = './toindex'
INDEX_DIR = File("index")

analyzer  = StandardAnalyzer(Version.LUCENE_CURRENT)

writer = IndexWriter(FSDirectory.open(INDEX_DIR),analyzer, 1, IndexWriter.MaxFieldLength.LIMITED)

listdirectory2file(path)



#writer.DocCount()
writer.optimize()
writer.close()

et un système de recherche :


import sys

# Add jars to classpath
jars = ["./lucene-core-3.0.2.jar"]

for jar in jars:
    sys.path.append(jar)


from org.apache.lucene.analysis.standard import *
from org.apache.lucene.index import *
from org.apache.lucene.store import *
from org.apache.lucene.util import *
from org.apache.lucene.document import Document, Field 
from org.apache.lucene.search import IndexSearcher, TopScoreDocCollector
from org.apache.lucene.queryParser import QueryParser

from java.io import File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;

querystring = "test"
path = './toindex'
INDEX_DIR = File("index")
hitsPerPage = 10


analyzer  = StandardAnalyzer(Version.LUCENE_CURRENT)
searcher = IndexSearcher(SimpleFSDirectory(INDEX_DIR))
query = QueryParser(Version.LUCENE_CURRENT, "content", analyzer).parse(querystring)

hits = searcher.search(query,hitsPerPage)


for hit in hits.scoreDocs:
    print "====="
    print hit.score, hit.doc, hit.toString()
    doc = searcher.doc(hit.doc)
    print doc.get("name").encode("utf-8")

Bon si vous êtes un peu familier avec le python, ce code ne devrait pas trop vous dérouter. Pour le reste, vous aurez noter la présence du fichier "lucene-core-3.0.2.jar" là où je lance mes commandes :
jython createindex.py
et
jython queryindex.py

Amusez-vous bien et n'hésitez pas à me poser des questions si vous rencontrez des difficultés.

8/21/2007

Marre de Google : essaye Exalead

Si vous en avez un peu marre de la soi-disante suprématie de google sur la recherche sur Internet, je vous propose d'essayer un nouveau moteur de recherche, dit de nouvelle génération: Exalead
ce moteur de recherche était ou est encore impliqué dans le moteur de recherche européen Quaero, si ce dernier voit le jour ou pas.... Les points forts d'Exalead sont les mini vues des sites

j'aime aussi la possibilité de faire des recherches directement dans Wikipédia, le moteur de recherche pour le films est très bon et la zapette est une idée géniale : à essayer absolument

de plus Exalead vous permet d'effectuer des recherches avec des expressions régulières, les fameuses RegEx: les connaisseurs apprécieront. Pour finir et comme gage de qualité: COCORICO, ce moteur de recherche est français et a été fondé par François Bourdoncle : un pur produit de nos meilleures écoles françaises (Polytechnique et Mines)


1/17/2007

Google from scratch

Pourquoi ne pas devenir le nouveau Google? En effet tous les ingrédients sont aujourd'hui à votre disposition... la librairie du moteur de recherche Lucene + un crawler opensource du type Nutch ou Hadoop... Il ne vous manque plus que la mémoire et la puissance de calcul... Il suffit de demander à Amazon, qui pour un prix très compétitif vous fournira de la puissance de calcul et de l'espace de stockage razz Alors qu'attendez-vous pour devenir multi-godillonaire comme Forrest Gump? lol un bon business model pour payer Amazon et peut-être faire des bénéfices cool ou bien vous pouvez priez le dieu Web 2.0twisted

1/09/2007

Google est mort (Ainsi parlait WolverineX02)

Ne vous est-il pas déjà arrivé de faire une recherche sur Google et de ne pas trouver ce que vous cherchez? Certainement... Il est encore plus frustrant d'avoir fait une recherche, d'être allé chercher la perle rare au beau milieu de toutes ces pages vides de contenus mais ayant un excellent page rank... et de ne plus pouvoir la retrouver avec la même requête... evil evil Que la vie est injuste... La vie était tellement plus simple avant quand il y avait moins de pages... Les grands moteurs de recherche semble atteindre leurs limites: le googlebot n'est pas capable de faire la différence entre un splog et un véritable blog... Mais il paraîtrait que ça va changer avec l'arrivée des moteurs de recherche de troisième génération:
  • Wikia (ne fonctionne pas encore, par le fondateur de Wikipedia, le nom de code du projet est Wikiasari)
  • Megaglobe (ne fonctionne pas encore, mais vous pouvez déjà vous faire référencer: ça ne peut pas faire de mal)
  • Accoona (jolie te rieuse et qui fonctionne)
  • Searchmash (c'est Google, qui est derrière le projet)
  • et de nombreux autres... Lucene, Nutch, Hadoop
Il y a quelques temps déjà je me demandais à quoi pouvait bien rimer ses projets (Picasa, GoogleReader, Gmail...) Maintenant la réponse est claire: se diversifier ou mourir... Quand on est un mamouth, on bouge bien moins vite qu'une jeune startup... Google est mort exclaim