SlideShare une entreprise Scribd logo
1  sur  78
Télécharger pour lire hors ligne
[ Jeudis du Libre, Mons – Mercredi 16 mai 2012 ]

Créer un moteur de recherche avec
                des logiciels libres
                       Auteur : Dr Ir Robert Viseur
Qui suis-je ?

• Robert Viseur
  • Ingénieur Civil, Mastère en Management de
    l'Innovation, Docteur en Sciences Appliquées.
  • Spécialisé dans les questions relatives à l'économie
    des logiciels libres et aux pratiques de co-création,
    ainsi que dans les technologies de recherche et de
    traitement de l'information (outils d'indexation,
    API,...).
  • Assistant à la Faculté Polytechnique de l'Université
    de Mons (www.umons.ac.be).
  • Conseiller technologique au CETIC (www.cetic.be).
                                                            2
Qu'est-ce que le CETIC ?

• Centre d'Excellence en Technologies de l'Information et
  de la Communication basé à Charleroi (Belgique).
• Trois départements (et types de services) :
   • Software & System Engineering : qualité logicielle
     (fiabilité, sécurité, respect des normes internationales,
     processus,...).
   • Software & Services Technologies : architectures
     orientées services et sémantique.
   • Embedded & Communication Systems : prototypage de
     systèmes embarqués communicants et nouvelles
     technologies électroniques.


                                                                 3
De quoi allons-nous parler ?

• Sujet : comment créer un moteur de recherche à
  base de logiciels libres ?

• Plan :
   • Qu'est-ce qu'un moteur de recherche ?
   • Faut-il utiliser une base de données « fulltext » ou
     un pur indexeur ?
   • Jusqu'où est-il utile de développer soi-même ?
   • Exemples : création de moteurs de recherche
     spécialisés.

                                                            4
Qu'est-ce qu'un moteur de
               recherche ?




                         5
Définition



  « Un moteur de recherche est une application
 permettant de retrouver des ressources (pages
 web, articles de forums Usenet, images, vidéo,
fichiers, etc.) associées à des mots quelconques »
                    (Wikipedia).




                                                     6
Étapes de fonctionnement

• Crawler.
   • Collecter automatiquement les documents que l'on souhaite chercher sur un réseau local ou sur
     Internet.

• Extraire.
   • Extraire le contenu textuel (texte et métadonnées) des ressources collectées.
• Enrichir.
   • Trouver et ajouter de nouvelles informations sur base du contenu et de la structure du document.
• Analyser
   • Analyser le contenu textuel (en vue de son indexation).
• Indexer.
   • Transformer le contenu textuel en une forme facilitant la recherche par un ordinateur.
• Rechercher.
   • Proposer une interface de recherche pour des utilisateurs (WUI) ou des logiciels (API).
• Composer
   • Associer à un ensemble de sources de résultats complémentaires.




                                                                                                     7
Crawler

• Réseau Internet:
    • Ouvrir les pages Web issues d'un ensemble de pages
      Web de départ.
    • Extraire des liens présents dans les pages Web.
    • Suivre ces liens (découverte automatique d'Internet).
•   Réseau local:
    • Suivre l'arborescence de répertoires, faire l'inventaire
      des fichiers disponibles.
    • Éventuellement, constituer une copie locale des
      fichiers à indexer.
    • Attention aux droits d'accès aux documents (sécurité)!
                                                                 8
Extraire (1/5)

• L'indexation se fait sur du texte brut (texte ou
  métadonnées).
• Besoin d'extraire...
   • le contenu textuel associé au document / à la
     ressource...
   • et/ou associé à son contexte (ex. : vidéo ou photo
     insérée dans un document HTML).




                                                          9
Extraire (2/5)

• Complexité variable.
  • Très simple pour du texte.
  • Simple pour du (X)HTML ou du XML (RSS, Atom,
    FOAF, etc.).
     • En pratique:
        – Texte avec des balises (tags).
        – Plus ou moins bien formé.
     • Exemple: HTML.




                                                        10
Extraire (3/5)

• Complexité variable (suite).
   • Besoin d'analyseurs spécialisés pour les formats
     binaires (ex. : photos, vidéos, documents
     bureautiques, etc.).
      • Extraction des métadonnées.
         – Exemple : tags ID3 dans les fichiers MP3.




                                                           11
Extraire (4/5)

• Complexité variable (suite).
   • Besoin d'analyseurs spécialisés pour les formats binaires
     (suite).
      • Extraction du texte.
          – Exemple : fichier dans le format ouvert ODT (fichiers XML et autres
            ressources « zippées ».




      • Plus difficile si formats non documentés.
                                                                                  12
Extraire (5/5)

• Complexité variable (suite).
   • Beaucoup plus difficile pour les documents scannés
     (OCR).




                                        (...)

                                                          13
Enrichir (1/3)

• Il est possible d'aller plus loin que la simple
  extraction des métadonnées et du texte.
• Pour les documents HTML:
   • Compréhension des microformats.
      • Exemple: hCard / vCard.




                                                    14
Enrichir (2/3)

• Pour les documents HTML (suite):
     • Rétroingénierie (extraction structurée -> redonner du sens
       aux informations formatées en HTML).




                                                                    15
Enrichir (3/3)

• Pour les contenus textuels:
   • Extraction d'entités nommées.
      • Exemple : reconnaître des noms de personnes,
        d'organisations, de villes, de pays, des dates, etc.
• Autre possibilité : exploiter des logiciels, des bases
  de données ou des services externes pour enrichir
  le document.
   • Exemples: langue du document, catégorisation, etc.




                                                               16
Analyser (1/2)

• Généralement, cette tâche est réalisée par
  l'indexeur lui-même.
• Degré de sophistication variable.
  • Base: segmentation du texte par tokenization.
     • Les phrases sont décomposées en éléments simples.
  • Possibilité (ou non) de configurer des règles de
    filtrage.
     • Exemple : suppression des mots trop courts, suppression
       des « stops words », etc.




                                                                 17
Analyser (2/2)

• Degré de sophistication variable (suite).
   • Lemmatisation.
      • Transformation des mots à indexer en lemme (forme
        canonique).
      • Exemple: avoir = ai, as, a, avons, eussions eu, aurions, etc.
      • But: amélioration du rappel du moteur de recherche
        (parfois au détriment de la précision).
      • Nécessite un dictionnaire dans la langue du document à
        indexer.
   • Procédé voisin (plus basique) sur base de règles de
     troncature (stemming).
      • Exemple: algorithme de Porter.
                                                                    18
Indexer (1/3)

• Création d'un index inversé.
   • Typiquement: structure mettant en correspondance
     des mots avec un ensemble de documents.
   • La recherche d'un ou plusieurs mots permet de
     facilement retrouver les documents le ou les
     contenant.




                                                        19
Indexer (2/3)

• Vue (très) simplifiée:
   <doc1> = <mot1> <mot2> <mot3>
   <doc2> = <mot4> <mot1>

  Index:
  <mot1>   <doc1>   pos=1
  <mot2>   <doc1>   pos=2
  <mot3>   <doc1>   pos=3
  <mot4>   <doc2>   pos=1
  <mot1>   <doc2>   pos=2

  Requêtes:
  q = <mot4> -> <doc2>
  q = <mot1> OR <mot4> -> <doc2>, <doc1>
                                                   20
Indexer (3/3)

• Modèle de pertinence intégré.
  • Un classique: modèle TFxIDF.
     • La fréquence d'apparition de chaque terme dans un
       document est pondérée par la fréquence du terme dans le
       jeu de documents.
  • Évolutions possibles : classement fonction de la
    localisation, de la structure des liens (cf. Google
    Pagerank), etc.




                                                                 21
Rechercher (1/2)

• Proposer une interface d'interrogation du moteur.
   • Pour humains (Web User Interface, WUI).
   • Pour logiciel (Application Programming Interface,
     API).
• Raffinements possibles : catégorisation, clustering,
  facétisation, etc.




                                                         22
Rechercher (2/2)

• Remarque: Les moteurs de recherche
  commerciaux proposent une API (Google, Bing,
  etc.).
  •   Passage progressif au modèle payant.
  •   Conditions d'utilisation parfois restrictives.
  •   Problèmes de fiabilité (cf. webométrie).
  •   Mais utilité:
       • pour initier des crawls,
       • pour disposer de listes d'URLs ciblées (analyse en
         profondeur),
       • pour compléter des résultats de recherche (composition).

                                                                    23
Composer

• Plusieurs sources de données peuvent être
  combinées.
• Exemples:
  • principe du métamoteur,
  • lien avec des bases de données sémantiques.




                                                  24
Faut-il utiliser une base de données
  « fulltext » ou un pur indexeur ?




                                   25
Bases de données simples (1/2)

• Base de données = tables de données (lignes /
  colonnes) liées (via des clefs / identifiants).
• Typage des données, contraintes d'intégrité.
• Language d'interrogation standardisé proche du
  language humain (SQL).
• Large disponibilité d'outils de création.
• Par défaut, pas de fonctionnalité « fulltext ».




                                                    26
Bases de données simples (2/2)

• Recherche de texte possible par:
  • Recherche de sous-chaînes de caractères via "LIKE".
     • Sous-chaînes != mots.
        – Filtrage nécessaire avant affichage.
  • Recherche possible via des expressions régulières.
-> pas adapté à de gros volumes de données (>
100.000 lignes par table).




                                                          27
Base de données « fulltext »

• Mêmes caractéristiques que pour la base de données
  simple, mais...
  • Création automatique d'un index inversé.
  • Performances variables:
     • volume de données supporté (nombre d'enregistrements,
       longueur du texte),
     • finesse d'analyse du texte (lemmatisation ou non,
       personnalisation de l'analyse ou non, etc.),
     • richesse variable du langage d'interrogation,
     • support variable des langues (si lemmatisation).
  • Le langage d'interrogation de l'index « fulltext » varie
    d'un SGBG à un autre.
                                                               28
Pur indexeur

• Outil dédié uniquement à la recherche fulltext.
• Plus de structure tabulaire, de contraintes
  d'intégrité, ni de language d'interrogation
  universel.
• En général:
   •   conçu pour gérer de gros volumes de texte,
   •   facilement embarquable dans un logiciel,
   •   possibilités de personnalisation du comportement,
   •   syntaxe d'interrogation riche,
   •   notion de champs (sans contrainte).
                                                           29
Technologies libres

• Bases de données « fulltext » :
   • MySQL (mode « fulltext »), PostgreSQL (Tsearch2),
     Sphynx Search (extension pour MySQL et PostgreSQL).
• Pur indexeur :
   • Lucene, ports Lucene, Xapian, Whoosh, etc.
• Rapide comparatif :




• Remarque: couvertures fonctionnelles variables.          30
Jusqu'où est-il utile de développer
                         soi-même ?




                                  31
Approches possibles

• Trois approches possibles :
   • Utilisation d'outils intégrés.
      • A utiliser s'ils sont adaptés.
   • Développement ex nihilo (DIY).
      • A démarrer si un avantage fonctionnel peut être trouvé.
   • Développement sur base de composants libres.
      • A privilégier si pas d'outil intégré disponible.
• Suite : présentation non exhaustive de logiciels
  libres disponibles.


                                                                  32
Existence d'outils intégrés (1/2)

• Serveur d'indexation: SolR (lucene.apache.org/solr/).
   • Comprend: extracteurs (Apache Tika), indexeur
     (Lucene), API (JSON ou REST).
• Métamoteurs:
   • Carrot² (métamoteur, clustering; carrot2.org).
   • Seeks (métamoteur, P2P; seeks-project.info).




                                                          33
Existence d'outils intégrés (2/2)

•   Moteur de recherche intégré:
    • Nutch (nutch.apache.org).
       • Comprend: crawleur, extracteurs, indexeur, WUI et API.
       • Basé sur SolR.
       • Fonctionnel avec Internet ou Intranet.
• Moteur de recherche complet décentralisé (P2P):
    • YaCy (yacy.net).
       • Comprend: crawleur, extracteurs, indexeur, WUI et API
         (OpenSearch).




                                                                  34
Plusieurs de langages de
          programmation adaptés au Web
• Plusieurs languages de programmation libres
  adaptés au Web.
  • Exemples: Python, Perl, Java, Ruby, PHP, etc.
     • Possibilité de développements sur mesure...
     • Basé sur des bibliothèques réutilisables
        – Exemple : gestion des threads, ouverture d'URLs, analyse de
          textes, analyse HTML, etc.
  • Attention au syndrome NIH...




                                                                        35
Existence de composants spécialisés
                                 (1/3)
• Crawler:
   • Wget.
• Extraire :
   • Lecture de flux RSS ou Atom:
      • Feedparser (Java, Python), Simplepie (PHP), etc.
   • Extraction de texte et de métadonnées :
      • Apache Tika / POI (Java), utilitaires (xls2csv, catdoc, pdfinfo,
        etc.), iFilters (propriétaire, disponible sous Windows), etc.
   • Extraction d'articles (contenu utile) :
      • Boilerpipe (Java).
   • OCR:
      • GOCR, OCRAD, Tesseract, etc.
                                                                           36
Existence de composants spécialisés
                                 (2/3)
• Analyser :
   • Stemming:
      • Snowball (Java).
   • Rétroingénierie de pages Web:
      • DEiXTo, Web Harvest, etc.
   • TAL:
      • OpenNLP (Java), NLTK (Python), etc.
   • Détection de langue:
      • Language-detection (Java), NLTK (Python),
        Text_LanguageDetect (PHP), etc.
   • Extraction d'entités (nommées ou pas):
      • OpenNLP (Java), UIMA (Java), Stanbol, etc.
                                                     37
Existence de composants spécialisés
                                   (3/3)
• Indexer :
   • Indexation (SGBD):
      • MySQL, PostgreSQL, etc.
   • Indexation (indexeur):
      • Lucene (Java), Whoosh (Python), Zend Search (PHP), etc.
• Rechercher :
   • Classification:
      • Mahout (Java), NLTK (Python), Reverend (Python), etc.
• Composer :
   • Métamoteur : Carrot².
• Divers :
   • Bases de données:
      • DBPedia (Wikipedia), Geonames (base de données géographique), etc.
• Remarque : existence de très nombreux petits projets spécialisés et parfois
  très utiles.

                                                                             38
Et pourquoi pas du logiciel
                                         propriétaire ?
• Existence de technologies propriétaires reconnues pour l'indexation.
   • Exemples : Dtsearch, Oracle TEXT, etc.
      • Point fort : très large couverture fonctionnelle, performances de haut niveau.
      • Point faible : prix, « lock-in » technique.
• Le monde Java est alimenté par des projets de recherche (publics ou
  privés) en traitement de l'information.
   • Exemples (logiciels libres) : UIMA, Stanbol, Nepomuk, etc.
      • Existence d'alternatives en Python (parfois) et, dans une moindre mesure, en
        Microsoft .Net (C#, ASPX, etc.).

• Existence d'outils gratuits (mais non libres).
   • Exemples : TreeTagger, Sentiwordnet, etc.




                                                                                         39
Exemples pratiques : création de
moteurs de recherche spécialisés




                               40
Exemple 1 : moteur de recherche
                            de podcasts
• Objectif :
   • Sur base d'une liste de podcasts (fichiers RSS)...
   • Indexer le contenu des flux RSS...
   • En distinguant...
   • Les descriptifs de chaque fichier RSS et...
   • Les descriptions de chaque ressource multimédia
     référencée...
   • Et permettre des recherches par mots-clefs.



                                                          41
Outils réutilisés

• Lecture RSS : Feedparser (Python).
• Indexation : MySQL (fulltext).
  • Fonctionnement simple (extension du SQL) :
     • Création de la table avec index :
         – CREATE TABLE news ( id INT UNSIGNED
           AUTO_INCREMENT NOT NULL PRIMARY KEY, title
           VARCHAR(256), content TEXT, FULLTEXT (title,
           content) )
     • Recherche par mot-clef :
         – SELECT id, title, content, MATCH
           (title,content) AGAINST ('linux') AS score
           FROM news WHERE MATCH (title,title) AGAINST
           ('linux') ORDER BY score

                                                          42
Résultat

• Exemples de résultat de recherche :




                                               43
Exemple 2 : moteur de recherche
                            de flux RSS
• Objectif : découvrir, indexer et rechercher des
  flux RSS.




                                                    44
Outils

• Indexation via Zend Search (voir exemple 3).
• Développement spécifique: crawler.
   • Développement Python utilisant « urllib », « string »,
     « sgmlparser » et « threading ».
   • Crawler (Python) spécialisé dans la découverte de flux RSS.
      •   Principe: sur base d'une liste d'URL (amorce),
      •   le crawler (multi-thread) ouvre les pages d'accueil,
      •   identifie les flux RSS et Atom (et les ajoute à une liste),
      •   extrait les noms de domaine des liens sortants,
      •   et ajoute ces noms de domaine aux URLs à visiter.
   • But: explorer peu de pages HTML mais trouver un maximum
     de flux de syndication en un minimum de temps et avec un
     minimum de bande passante.
                                                                             45
Résultat

• Collecte aisée de plusieurs dizaines de milliers de
  flux RSS et Atom, en français, anglais, néerlandais
  et espagnol.
• Recherche avancée : par mots-clefs, par pays, par
  langue, restriction possible aux podcasts.




                                                        46
Exemple 3: moteur de recherche
                           d'entreprises
• Point de départ: données de l'annuaire
  Logiciellibre.com.
• Objectif :
   • A partir d'une base de données d'adresses
     d'entreprises actives dans le logiciel libre...
   • Créer un index Web spécialisé...
   • Pour identifier les entreprises actives sur certaines
     technologies et étudier leur environnement.




                                                             47
Outils réutilisés

•   Crawl: Wget.
•   Indexation: Zend Search.
•   Extraction d'entités: Boilerplate, OpenNLP.
•   Visualisation: WUI et DOT.




                                                  48
Wget (1/2)

• Utilitaire GNU en ligne de commande, compatible
  Linux ou Cygwin, permettant de récupérer des
  fichiers en utilisant HTTP, HTTPS et FTP.
• Commande de base :
  • wget www.cetic.be
     • Stocke localement la page située à l'adresse
       « www.cetic.be ».
• Commande pour un crawl :
  • wget -r -l2 -P www -R jpg,gif,png 'http://www.cetic.be'
     • Crawl récursif de profondeur 2 pour le site
       « http://www.cetic.be » et résultats du crawl dans le répertoire
       « www » (+ rejet des photos).
                                                                      49
Wget (2/2)

• Multiples options :
   • -r (crawl récursif)
        • Par défaut : respect de la convention « norobots »
   •   -l (profondeur de récursion)
   •   -P (répertoire cible pour le stockage)
   •   -A et -R (filtrage des URLs par pattern)
   •   --user-agent (« user agent » imposé)
   •   ...
• Plus d'infos : http://www.gnu.org/software/wget/manual/ .
• Alternative : curl (puissant mais... pas de crawl
  récursif).
                                                               50
Lucene (1/2)

• Outil d'indexation supporté par la fondation Apache
  (lucene.apache.org).
• Ecosystème étendu :
   • Utilisé dans Alfresco, Jahia, Liferay,...
   • Extension au cloud (ex. : CouchDB-lucene).
   • Beaucoup d'outils tiers : Luke (lecture d'un index),
     Solr (serveur de recherche ; sans crawler), Nutch
     (moteur de recherche avec crawler), Carrot2
     (interface de recherche compatible OpenSearch et
     Solr),...
   • Cf. http://wiki.apache.org/lucene-java/PoweredBy .
                                                            51
Lucene (2/2)

• Le format d'index est devenu une sorte de
  standard.
  • Nombreux portages : Lucene.Net (. Net), PyLucene
    (Python), CLucene (C++) Plucene (Perl), Zend
    Search (PHP),...
  • Différents types de portages : par traduction
    littérale (compatibilité d'API d'abord), par
    traduction optimisée pour le langage cible
    (performances d'abord) et par binding (Python).
  • Points à surveiller : couverture fonctionnelle,
    version de l'index,...
                                                       52
Zend Search (1/4)

• Portage de Lucene en PHP.
  • API spécifique.
  • Support de la version d'index 2.3 (depuis Zend
    Framework 1.6).
  • Support de l'UTF-8 en interne.
  • Intégré au framework Zend mais utilisable
    séparément (taille sur disque : 734,3 ko).
  • Taille d'index théorique maximum = 2GB (système 32
    bits).
  • Facilement hébergeable (installable sur un
    hébergement mutualisé type OVH ou Lost Oasis).
                                                         53
Zend Search (2/4)

• Plusieurs types de champs supportés :
  « Keyword », « UnIndexed », « Binary », « Text »
  et « UnStored ».




                                                     54
Zend Search (3/4)

• Syntaxe supportée lors des recherches :
    • Opérateurs booléens (« OR » ou « || », « AND » ou « && »,
      « NOT » ou «  ! », « + », « - »),
    • indicateur de champs (« title: »),
    • jokers (« ? » ou « * »),
    • recherche par intervalle (dates ou chaines),
    • recherche floue (« ~ »),
    • recherches de proximité (« ~ »),
    • facteur de boost (« ^ »).
• Possibilité de trier par champs.
• Cf. http://framework.zend.com/manual/fr/zend.search.lucene.searching.html et
  http://framework.zend.com/manual/fr/zend.search.lucene.query-language.html .


                                                                                 55
Zend Search (4/4)

• Possibilité de personnaliser l'analyse des documents :
   • Utilisation d'un analyseur par défaut
     (Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive).
   • Possibilité de choisir un analyseur (compatible UTF-8,
     compatible avec les nombres,...).
   • Possibilité de configurer des filtres (« lowercase »,
     « stop words », « short words »).
   • Possibilité de créer son propre analyseur.
   • Cf. http://framework.zend.com/manual/fr/zend.search.lucene.extending.html .
• Possibilité de chargement direct de documents :
  formats HTML, MS Word / Powerpoint / Excel,...
                                                                                   56
Encodage UTF-8 sous PHP (1/2)

• PHP 5 (et <5) travaille en ISO-8859-1.
• Problème ?
   • L'UTF-8 permet de présenter davantage de jeux de caractères que
     l'ISO 8859-1 mais...
   • L'UTF-8 stocke les caractères sur 1 ou plusieurs octets (1 seul en ISO-
     8859-1).
• Donc ?
   • L'UTF-8 est mieux adapté à l'Internet.
   • La chaîne d'outils utilisés (éditeur, langage de script, base de
     données, navigateur,...) doit connaître l'encodage utilisé pour
     comprendre les chaînes.
        • Exemple de problème : « Archive — Little I dreamed of being like L©guman ...
          now I eat carrots ».
• Cf.   http://openweb.eu.org/articles/jeux_caracteres   .
                                                                                          57
Encodage UTF-8 sous PHP (2/2)

• Dans PHP :
  • La logique est différente de celle de Python, qui propose un
    type « string » et un type « Unicode ». PHP est très faiblement
    typé et travaille uniquement avec des chaines.
  • La conversion entre ISO et UTF-8 se fait à l'aide des fonctions
    « utf8_encode() » et « utf8_decode() ». Les autres conversions
    se font via « iconv ».
  • La manipulation des chaines en UTF-8 se fait à l'aide de la
    bibliothèque « mbstring ».
• La détermination de l'encodage des caractères en entrée
  n'est pas triviale (headers HTTP parfois erronés,
  métadonnées HTML parfois absentes ou erronées, outils de
  détection pas toujours fiables,...).
                                                                  58
Indexation sous Zend Search (1/2)

• Création d'un index et insertion :
     $index = Zend_Search_Lucene::create('/data/my-index');
     $doc = new Zend_Search_Lucene_Document();
     $doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle));
     $doc->addField(Zend_Search_Lucene_Field::UnIndexed('url', $docUrl));
     $doc->addField(Zend_Search_Lucene_Field::UnStored('content',
$docContent));
     $index->addDocument($doc);
     $index->commit() ;



• Optimisation de l'index :
     $index->optimize();

                                                                            59
Indexation sous Zend Search (2/2)

• Ouverture d'un index et recherche :
   $index = Zend_Search_Lucene::open('/data/my-index') ;
   $query = Zend_Search_Lucene_Search_QueryParser::parse($input);
   $hits    = $index->find($query);
   foreach ($hits as $hit) {
       echo $hit->score;
       echo $hit->title;
       echo $hit->url;
   }



• Paramètres : opérateur par défaut, encodage des
  données,...

                                                                    60
Divers

• Attention : wget affecte conventionnellement le nom « index.html » à
  l'adresse « / ».
• Analyse des documents HTML :
   • native (cf. « Zend_Search_Lucene_Document_Html »),
   • manuelle non structurée (extraction des métadonnées -title, description,...-
     par expressions régulières et nettoyage du <body> via « strip_tags ») ou...
   • manuelle structurée (extraction structurée par expression régulière ou Xpath).
• Lucene ne gère pas les contraintes d'intégrité.
   • Les doublons ne peuvent donc pas être évités via un champ « UNIQUE ».
   • Or, hash utile sur l'URL, voire sur le contenu (duplicate content).
   • Solutions possibles : test sur un champ unique dans l'index ou test sur base
     d'une table externe (ex. : hash dans SQLite).




                                                                                      61
Mode de fonctionnement (1/3)

• Étape 1 : constituer une base de données d'URLs (basé sur
  logiciellibre.com).

• Étape 2 :
   • Détecter les éventuelles redirections, sites morts, etc
     (automatisable sous PHP avec « get_headers »).
   • Générer les requêtes wget correspondantes.
   • Lancer le crawl avec « wget ».
• Étape 3 : lancer l'indexation des pages collectées par
  « wget ».

• Utilité : identifier les prestataires actifs sur une ou plusieurs
  technologies particulières.
                                                                  62
Mode de fonctionnement (2/3)




                           63
Mode de fonctionnement (3/3)

• Performances :
Active index: index-fr:
 Create index:
   From 30-06-2011 13:39:16 to 30-06-2011 13:44:28.
   Size of the index: 4299 document(s) and 35,5Mo.
   Time: 258,957s. (60,237ms./doc.).
 Optimization time: 49,154s.
 Tests:
   Search (test): 25 result(s) (max.: 25) in 10,130ms. for 'python'.
   Search (test): 69 result(s) (max.: 250) in 4,425ms. for 'python'.
   Search (test): 25 result(s) (max.: 25) in 11,798ms. for 'python AND plone'.
   Search (test): 27 result(s) (max.: 250) in 7,111ms. for 'python AND NOT plone'.
   Search (test): 102 result(s) (max.: 250) in 8,569ms. for 'python OR plone^4'.




                                                                                     64
Les petits plus...

• Deux exemples :
  • Visualisation des relations des entreprises
    (écosystème).
  • Création de nuages de tags.




                                                  65
Visualisation des relations
                                 (écosystème)
• Exemple d'application :
   • Visualiser les relations entre entreprises,et entre les
     entreprises et leur environnement (communautés,
     organismes publics, etc.)
• Comment faire ?




                                                           66
Processus

• Sur base des liens hypertextes entre les sites.
   • Comptabilisation des relations de page à page.
   • Utilisation du format DOT pour représenter le
     graphe de relations.
   • Utilisation du logiciel en ligne de commande Dot.
   • Remarque : existence d'outils plus évolués: Gephi
     (gephi.org), Tulip (tulip.labri.fr), etc.




                                                         67
Résultat




       68
Création d'un nuage de tags

• Exemple d'application:
    • Pour chaque site Internet repris dans l'index:
       • Avoir une vue des personnes importantes (employés,
         références, etc.).
       • Avoir une vue globale de l'entreprise (partenaires,
         technologies, normes, localisations, etc.).
•   Comment faire ?




                                                               69
Processus

• Base: copie locale des sites obtenue par wget.
• Pour chaque page HTML d'un site Web:
   1. Extraction du contenu textuel utile avec
     Boilerplate.
   2. Analyse du contenu textuel avec OpenNLP.
      ●
          Extraction des noms de personnes.
      ●
          Étiquetage grammatical.
           ●
               Extraction des noms propres (personnes, entreprises,
               technologies, normes, etc.).
   3. Tri (filtrage : fréquence, « patterns »).
   4. Création des nuages de tags.
                                                                      70
Résultat




       71
Principales difficultés

• Principalement liées à OpenNLP
  • Fiabilité globalement correcte mais...
     • Sensibilité vis-à-vis du texte donné en entrée.
         – Exemple : <START:person> Andy Gibbs 1 <END> Felipe
           Contreras 1 Frederik Pasch 1 Heiko Zuerker 1 Javier
           Viguera <START:person> 1 <END> Luca Ceresoli 1 Marcelo
           Roberto Jimenez 1 Marcus Osdoba 1 Matt Johnson 1
           <START:person> Paul Burton 1 Paul Jones 1 <END>
         – Importance de la conversion HTML -> texte.
     • Nombre limité de fichiers d'entrainement.
         – Exemple: étiquetage grammatical (disponible en anglais, néerlandais ou
           espagnol, mais pas en français).
  • Le filtrage sur base de la fréquence d'apparition limite la
    présence de tags peu pertinents.

                                                                                72
Conclusion




         73
Conclusion (1/2)

•   Large variété d'outils libres disponibles:
    • logiciels intégrés,
    • Composants réutilisables,
    • bibliothèques de base.
• Capacité des outils libres à répondre à des besoins
  variés mais...
    • Concepts de base à maîtriser.
    • Intégration (souvent) moindre comparé à des
      équivalents propriétaires (ex.: Oracle Text).


                                                        74
Conclusion (2/2)

• Sujets peu ou prou abordés :
  • Problématique de passage à l'échelle.
     • Temps des crawls (et leur ciblage).
     • Temps d'analyse des contenus.
     • Gestion des grands volumes de données (> million de
       documents).
     • Technologies Cloud (ex.: bases NoSQL, Hadoop, etc.).
  • Développement de moteurs de recherche
    sémantiques.
     • Cf. Fauconnier et Roumier (2011).



                                                              75
Merci!



Merci pour votre attention.

     Des questions ?




                                   76
Ressources et liens utiles

• Robert Viseur (2012). « De l'annuaire de sites à la recherche
  sociale: 15 ans d'évolution! ». Etudiant Polytech d'un jour
  (UMONS). URL : http://www.robertviseur.be/news-20120225.php .
• Robert Viseur (2011). « Développement d'un moteur de recherche
  avec Zend Search ». RMLL 2011. URL : http://www.robertviseur.be/news-20110721.php .
• Jean-Philippe Fauconnier et Joseph Roumier (2011). Semantic
  Search Engine Dedicated to Music & Musicians. Music Linked Data
  Workshop, London, May 12, 2011. URL : http://shrl.be/000092 .
• Robert Viseur (2010). « Introduction to libre « fulltext »
  technology ». RMLL 2010. URL : http://www.robertviseur.be/news-20100710.php .
• Erik Hatcher et Otis Gospodnetić (2004). « Lucene in Action ».
  Manning Publications Co.
• Soumen Chakrabarti (2003). « Mining the Web - Discovering
  Knowledge from Hypertext Data ». Morgan Kaufmann.
                                                                                        77
Contact

Dr Ir Robert Viseur

 Email (@CETIC) :             robert.viseur@cetic.be
 Email (@UMONS) :             robert.viseur@umons.ac.be

 Téléphone :                  0032 (0) 479 66 08 76
 Internet :                   www.robertviseur.be




               Cette présentation est diffusée sous licence « CC-BY-ND ».

                                                                                  78

Contenu connexe

Tendances

Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Georges Amichia
 
Introduction au Génie Logiciel
Introduction au Génie LogicielIntroduction au Génie Logiciel
Introduction au Génie Logicielguest0032c8
 
Introduction à la veille technologique S1E01
Introduction à la veille technologique S1E01Introduction à la veille technologique S1E01
Introduction à la veille technologique S1E01Alain Marois
 
La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?Jean-Marc Dupont
 
applications-reparties
applications-repartiesapplications-reparties
applications-repartiesmourad50
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oraclewebreaker
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...MOHAMMED MOURADI
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI Mansouri Khalifa
 
Cours des bases de données
Cours des bases de données Cours des bases de données
Cours des bases de données yassine kchiri
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api managementLilia Sfaxi
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiqueOussama Yoshiki
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esbLilia Sfaxi
 

Tendances (20)

Les collections en Java
Les collections en JavaLes collections en Java
Les collections en Java
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique
 
Introduction au Génie Logiciel
Introduction au Génie LogicielIntroduction au Génie Logiciel
Introduction au Génie Logiciel
 
Support POO Java première partie
Support POO Java première partieSupport POO Java première partie
Support POO Java première partie
 
Introduction à la veille technologique S1E01
Introduction à la veille technologique S1E01Introduction à la veille technologique S1E01
Introduction à la veille technologique S1E01
 
La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?La BI : Qu’est-ce que c’est ? A quoi ça sert ?
La BI : Qu’est-ce que c’est ? A quoi ça sert ?
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Les Contraintes | SQL Oracle
Les Contraintes | SQL OracleLes Contraintes | SQL Oracle
Les Contraintes | SQL Oracle
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Cours des bases de données
Cours des bases de données Cours des bases de données
Cours des bases de données
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api management
 
Spring Boot RestApi.pptx
Spring Boot RestApi.pptxSpring Boot RestApi.pptx
Spring Boot RestApi.pptx
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatique
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esb
 

En vedette

Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...
Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...
Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...Le_GFII
 
Les réseaux sociaux pour un emploi
Les réseaux sociaux pour un emploiLes réseaux sociaux pour un emploi
Les réseaux sociaux pour un emploiÉric Delcroix
 
Vendretips - Optimiser la lecture de vos sources d'informations avec Netvibes
Vendretips - Optimiser la lecture de vos sources d'informations avec NetvibesVendretips - Optimiser la lecture de vos sources d'informations avec Netvibes
Vendretips - Optimiser la lecture de vos sources d'informations avec NetvibesClémence Bertrand-Jaume
 
Utiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.com
Utiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.comUtiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.com
Utiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.comMeilleurCOIFFEURcom
 
Bing API : Retour sur la demo de la plénière
Bing API : Retour sur la demo de la plénièreBing API : Retour sur la demo de la plénière
Bing API : Retour sur la demo de la plénièreMicrosoft
 
Analyse de l’opinion et développement des marques - Présentation Bernard Normier
Analyse de l’opinion et développement des marques - Présentation Bernard NormierAnalyse de l’opinion et développement des marques - Présentation Bernard Normier
Analyse de l’opinion et développement des marques - Présentation Bernard NormierAproged
 
Panorama Top250 EY SYNTEC Software 2014
Panorama Top250 EY SYNTEC Software 2014Panorama Top250 EY SYNTEC Software 2014
Panorama Top250 EY SYNTEC Software 2014Franck Sebag
 
Content analytics slideshare aproged
Content analytics slideshare aprogedContent analytics slideshare aproged
Content analytics slideshare aprogedAproged
 
Twitter et la recherche d'emploi, volume 2
Twitter et la recherche d'emploi, volume 2Twitter et la recherche d'emploi, volume 2
Twitter et la recherche d'emploi, volume 2PoleDocumentation.fr
 
Enquête RegionsJob : emploi et réseaux sociaux, deuxième édition
Enquête RegionsJob : emploi et réseaux sociaux, deuxième éditionEnquête RegionsJob : emploi et réseaux sociaux, deuxième édition
Enquête RegionsJob : emploi et réseaux sociaux, deuxième éditionHelloWork
 
Maîtriser les outils web gratuits pour faire votre veille
Maîtriser les outils web gratuits pour faire votre veilleMaîtriser les outils web gratuits pour faire votre veille
Maîtriser les outils web gratuits pour faire votre veilleBilly Jannequin
 
Les grandes marques de champagne
Les grandes marques de champagneLes grandes marques de champagne
Les grandes marques de champagneAmo' Bedos
 
Vendretips - Optimisez son utilisation des moteurs de recherche
Vendretips - Optimisez son utilisation des moteurs de recherche Vendretips - Optimisez son utilisation des moteurs de recherche
Vendretips - Optimisez son utilisation des moteurs de recherche Clémence Bertrand-Jaume
 
1Collecte, analyse et valorisation de Bigdata textuelles multilingues
1Collecte, analyse et valorisation de Bigdata textuelles multilingues1Collecte, analyse et valorisation de Bigdata textuelles multilingues
1Collecte, analyse et valorisation de Bigdata textuelles multilinguesAproged
 
"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin
"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin
"Twitter la politique, pour le meilleur et pour le pire..." Alban MartinMarseille 2.0
 
[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...
[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...
[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...FrenchWeb.fr
 
Systematic Solutions Linux 2009
Systematic Solutions Linux 2009Systematic Solutions Linux 2009
Systematic Solutions Linux 2009Stefane Fermigier
 

En vedette (20)

Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...
Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...
Une veille intelligente dans un monde global - Proxem - Séminaire DIXIT du GF...
 
Les réseaux sociaux pour un emploi
Les réseaux sociaux pour un emploiLes réseaux sociaux pour un emploi
Les réseaux sociaux pour un emploi
 
Vendretips - Optimiser la lecture de vos sources d'informations avec Netvibes
Vendretips - Optimiser la lecture de vos sources d'informations avec NetvibesVendretips - Optimiser la lecture de vos sources d'informations avec Netvibes
Vendretips - Optimiser la lecture de vos sources d'informations avec Netvibes
 
Module application recrutement Facebook
Module application recrutement FacebookModule application recrutement Facebook
Module application recrutement Facebook
 
Utiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.com
Utiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.comUtiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.com
Utiliser les médias sociaux pour votre salon de coiffure - MeilleurCOIFFEUR.com
 
Bing API : Retour sur la demo de la plénière
Bing API : Retour sur la demo de la plénièreBing API : Retour sur la demo de la plénière
Bing API : Retour sur la demo de la plénière
 
Analyse de l’opinion et développement des marques - Présentation Bernard Normier
Analyse de l’opinion et développement des marques - Présentation Bernard NormierAnalyse de l’opinion et développement des marques - Présentation Bernard Normier
Analyse de l’opinion et développement des marques - Présentation Bernard Normier
 
Panorama Top250 EY SYNTEC Software 2014
Panorama Top250 EY SYNTEC Software 2014Panorama Top250 EY SYNTEC Software 2014
Panorama Top250 EY SYNTEC Software 2014
 
Jef C2 - Réseaux sociaux Galec
Jef C2 - Réseaux sociaux GalecJef C2 - Réseaux sociaux Galec
Jef C2 - Réseaux sociaux Galec
 
Content analytics slideshare aproged
Content analytics slideshare aprogedContent analytics slideshare aproged
Content analytics slideshare aproged
 
Nuskin cheveux presentation
Nuskin cheveux presentationNuskin cheveux presentation
Nuskin cheveux presentation
 
Twitter et la recherche d'emploi, volume 2
Twitter et la recherche d'emploi, volume 2Twitter et la recherche d'emploi, volume 2
Twitter et la recherche d'emploi, volume 2
 
Enquête RegionsJob : emploi et réseaux sociaux, deuxième édition
Enquête RegionsJob : emploi et réseaux sociaux, deuxième éditionEnquête RegionsJob : emploi et réseaux sociaux, deuxième édition
Enquête RegionsJob : emploi et réseaux sociaux, deuxième édition
 
Maîtriser les outils web gratuits pour faire votre veille
Maîtriser les outils web gratuits pour faire votre veilleMaîtriser les outils web gratuits pour faire votre veille
Maîtriser les outils web gratuits pour faire votre veille
 
Les grandes marques de champagne
Les grandes marques de champagneLes grandes marques de champagne
Les grandes marques de champagne
 
Vendretips - Optimisez son utilisation des moteurs de recherche
Vendretips - Optimisez son utilisation des moteurs de recherche Vendretips - Optimisez son utilisation des moteurs de recherche
Vendretips - Optimisez son utilisation des moteurs de recherche
 
1Collecte, analyse et valorisation de Bigdata textuelles multilingues
1Collecte, analyse et valorisation de Bigdata textuelles multilingues1Collecte, analyse et valorisation de Bigdata textuelles multilingues
1Collecte, analyse et valorisation de Bigdata textuelles multilingues
 
"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin
"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin
"Twitter la politique, pour le meilleur et pour le pire..." Alban Martin
 
[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...
[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...
[FW Invest] Près de 2,3 milliards d’euros investis dans la Tech française en ...
 
Systematic Solutions Linux 2009
Systematic Solutions Linux 2009Systematic Solutions Linux 2009
Systematic Solutions Linux 2009
 

Similaire à Créer un moteur de recherche avec des logiciels libres

Développement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchDéveloppement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchRobert Viseur
 
14h constellio rida_benelloun
14h constellio rida_benelloun14h constellio rida_benelloun
14h constellio rida_benellounAssociationAF
 
Modèles de données et langages de description ouverts 5 - 2021-2022
Modèles de données et langages de description ouverts   5 - 2021-2022Modèles de données et langages de description ouverts   5 - 2021-2022
Modèles de données et langages de description ouverts 5 - 2021-2022François-Xavier Boffy
 
Collecter des données sur Wikipédia : application à la création d'une base de...
Collecter des données sur Wikipédia : application à la création d'une base de...Collecter des données sur Wikipédia : application à la création d'une base de...
Collecter des données sur Wikipédia : application à la création d'une base de...Robert Viseur
 
Modèles de données et langages de description ouverts 4 - 2021-2022
Modèles de données et langages de description ouverts   4 - 2021-2022Modèles de données et langages de description ouverts   4 - 2021-2022
Modèles de données et langages de description ouverts 4 - 2021-2022François-Xavier Boffy
 
Apport des thésaurus pour le catalogage et la localisation des données enviro...
Apport des thésaurus pour le catalogage et la localisation des données enviro...Apport des thésaurus pour le catalogage et la localisation des données enviro...
Apport des thésaurus pour le catalogage et la localisation des données enviro...Desconnets Jean-Christophe
 
Modèles de données et langages de description ouverts 2021-2022 - 1
Modèles de données et langages de description ouverts   2021-2022 - 1Modèles de données et langages de description ouverts   2021-2022 - 1
Modèles de données et langages de description ouverts 2021-2022 - 1François-Xavier Boffy
 
Adbs2012presentation 120527125034-phpapp02
Adbs2012presentation 120527125034-phpapp02Adbs2012presentation 120527125034-phpapp02
Adbs2012presentation 120527125034-phpapp02ABES
 
N. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHS
N. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHSN. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHS
N. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHSOpenEdition
 
Richard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSH
Richard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSHRichard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSH
Richard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSHPhonothèque MMSH
 
Introduction à l'informatique documentaire - 2011
Introduction à l'informatique documentaire - 2011Introduction à l'informatique documentaire - 2011
Introduction à l'informatique documentaire - 2011Sylvain Machefert
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateYouness Boukouchi
 
Structuration de données, recherche et édition
Structuration de données, recherche et éditionStructuration de données, recherche et édition
Structuration de données, recherche et éditionEquipex Biblissima
 
JABES 2017 - L'histoire d'un document dans la plate-forme ISTEX
JABES 2017 - L'histoire d'un document dans la plate-forme ISTEXJABES 2017 - L'histoire d'un document dans la plate-forme ISTEX
JABES 2017 - L'histoire d'un document dans la plate-forme ISTEXABES
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Laurent Guérin
 
Tic recherche-scientifique
Tic recherche-scientifiqueTic recherche-scientifique
Tic recherche-scientifiquelazoumi ouarfli
 
Innovation dans le multimédia PPT
Innovation dans le multimédia PPTInnovation dans le multimédia PPT
Innovation dans le multimédia PPTberhili_piard
 
De la caractérisation des données à leur transformation
De la caractérisation des données à leur transformationDe la caractérisation des données à leur transformation
De la caractérisation des données à leur transformationDiane Le Hénaff
 

Similaire à Créer un moteur de recherche avec des logiciels libres (20)

Développement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchDéveloppement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend Search
 
14h constellio rida_benelloun
14h constellio rida_benelloun14h constellio rida_benelloun
14h constellio rida_benelloun
 
Modèles de données et langages de description ouverts 5 - 2021-2022
Modèles de données et langages de description ouverts   5 - 2021-2022Modèles de données et langages de description ouverts   5 - 2021-2022
Modèles de données et langages de description ouverts 5 - 2021-2022
 
Collecter des données sur Wikipédia : application à la création d'une base de...
Collecter des données sur Wikipédia : application à la création d'une base de...Collecter des données sur Wikipédia : application à la création d'une base de...
Collecter des données sur Wikipédia : application à la création d'une base de...
 
Modèles de données et langages de description ouverts 4 - 2021-2022
Modèles de données et langages de description ouverts   4 - 2021-2022Modèles de données et langages de description ouverts   4 - 2021-2022
Modèles de données et langages de description ouverts 4 - 2021-2022
 
Apport des thésaurus pour le catalogage et la localisation des données enviro...
Apport des thésaurus pour le catalogage et la localisation des données enviro...Apport des thésaurus pour le catalogage et la localisation des données enviro...
Apport des thésaurus pour le catalogage et la localisation des données enviro...
 
Modèles de données et langages de description ouverts 2021-2022 - 1
Modèles de données et langages de description ouverts   2021-2022 - 1Modèles de données et langages de description ouverts   2021-2022 - 1
Modèles de données et langages de description ouverts 2021-2022 - 1
 
Adbs2012presentation 120527125034-phpapp02
Adbs2012presentation 120527125034-phpapp02Adbs2012presentation 120527125034-phpapp02
Adbs2012presentation 120527125034-phpapp02
 
Adbs2012 presentation
Adbs2012 presentationAdbs2012 presentation
Adbs2012 presentation
 
N. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHS
N. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHSN. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHS
N. Dufournaud : XML TEI un outil méthodologique pour la recherche en SHS
 
Richard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSH
Richard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSHRichard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSH
Richard Walter (IRHT), "Chercheurs vos papiers", 26 novembre 2009, MMSH
 
Introduction à l'informatique documentaire - 2011
Introduction à l'informatique documentaire - 2011Introduction à l'informatique documentaire - 2011
Introduction à l'informatique documentaire - 2011
 
La persistance des données : ORM et hibernate
La persistance des données : ORM et hibernateLa persistance des données : ORM et hibernate
La persistance des données : ORM et hibernate
 
Structuration de données, recherche et édition
Structuration de données, recherche et éditionStructuration de données, recherche et édition
Structuration de données, recherche et édition
 
JABES 2017 - L'histoire d'un document dans la plate-forme ISTEX
JABES 2017 - L'histoire d'un document dans la plate-forme ISTEXJABES 2017 - L'histoire d'un document dans la plate-forme ISTEX
JABES 2017 - L'histoire d'un document dans la plate-forme ISTEX
 
Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022Microservices-DDD-Telosys-Devoxx-FR-2022
Microservices-DDD-Telosys-Devoxx-FR-2022
 
Sem info system_2012
Sem info system_2012Sem info system_2012
Sem info system_2012
 
Tic recherche-scientifique
Tic recherche-scientifiqueTic recherche-scientifique
Tic recherche-scientifique
 
Innovation dans le multimédia PPT
Innovation dans le multimédia PPTInnovation dans le multimédia PPT
Innovation dans le multimédia PPT
 
De la caractérisation des données à leur transformation
De la caractérisation des données à leur transformationDe la caractérisation des données à leur transformation
De la caractérisation des données à leur transformation
 

Plus de Robert Viseur

La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...
La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...
La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...Robert Viseur
 
L'écosystème régional du Big Data
L'écosystème régional du Big DataL'écosystème régional du Big Data
L'écosystème régional du Big DataRobert Viseur
 
Piloter son appareil photo numérique avec des logiciels libres
Piloter son appareil photo  numérique avec des logiciels  libresPiloter son appareil photo  numérique avec des logiciels  libres
Piloter son appareil photo numérique avec des logiciels libresRobert Viseur
 
Exploiter les données issues de Wikipedia
Exploiter les données issues de WikipediaExploiter les données issues de Wikipedia
Exploiter les données issues de WikipediaRobert Viseur
 
De l’open source à l’open cloud
De l’open source à l’open cloudDe l’open source à l’open cloud
De l’open source à l’open cloudRobert Viseur
 
Développer ses photos avec RawTherapee
Développer ses photos avec RawTherapeeDévelopper ses photos avec RawTherapee
Développer ses photos avec RawTherapeeRobert Viseur
 
Convertir ses photos en N/B avec Gimp
Convertir ses photos en N/B avec GimpConvertir ses photos en N/B avec Gimp
Convertir ses photos en N/B avec GimpRobert Viseur
 
L'open hardware : l'ouverture au service de l'innovation
L'open hardware : l'ouverture au service de l'innovationL'open hardware : l'ouverture au service de l'innovation
L'open hardware : l'ouverture au service de l'innovationRobert Viseur
 
Pechakucha (Mons) : Street Art à Mons
Pechakucha (Mons) : Street Art à MonsPechakucha (Mons) : Street Art à Mons
Pechakucha (Mons) : Street Art à MonsRobert Viseur
 
L'open hardware dans l'électronique (et au delà...)
L'open hardware dans l'électronique (et au delà...)L'open hardware dans l'électronique (et au delà...)
L'open hardware dans l'électronique (et au delà...)Robert Viseur
 
Analyse des concepts de Fab Lab, Living Lab et Hub créatif
Analyse des concepts de Fab Lab, Living Lab et Hub créatifAnalyse des concepts de Fab Lab, Living Lab et Hub créatif
Analyse des concepts de Fab Lab, Living Lab et Hub créatifRobert Viseur
 
Open Source Hardware for Dummies
Open Source Hardware for DummiesOpen Source Hardware for Dummies
Open Source Hardware for DummiesRobert Viseur
 
Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...
Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...
Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...Robert Viseur
 
Etude du secteur des prestataires FLOSS en Belgique
Etude du secteur des prestataires FLOSS en BelgiqueEtude du secteur des prestataires FLOSS en Belgique
Etude du secteur des prestataires FLOSS en BelgiqueRobert Viseur
 
Hacker son appareil photo avec des outils libres
Hacker son appareil photo avec des outils libresHacker son appareil photo avec des outils libres
Hacker son appareil photo avec des outils libresRobert Viseur
 
Comment gérer le risque de lock-in technique en cas d'usage de services de cl...
Comment gérer le risque de lock-in technique en cas d'usage de services de cl...Comment gérer le risque de lock-in technique en cas d'usage de services de cl...
Comment gérer le risque de lock-in technique en cas d'usage de services de cl...Robert Viseur
 
Hacker son appareil photo, c'est possible !
Hacker son appareil photo, c'est possible !Hacker son appareil photo, c'est possible !
Hacker son appareil photo, c'est possible !Robert Viseur
 
Comprendre les licences de logiciels libres
Comprendre les licences de logiciels libresComprendre les licences de logiciels libres
Comprendre les licences de logiciels libresRobert Viseur
 
Impact of cloud computing on FOSS editors
Impact of cloud computing on FOSS editorsImpact of cloud computing on FOSS editors
Impact of cloud computing on FOSS editorsRobert Viseur
 
Une introduction à la co-création dans le domaine des TIC
Une introduction à la co-création dans le domaine des TICUne introduction à la co-création dans le domaine des TIC
Une introduction à la co-création dans le domaine des TICRobert Viseur
 

Plus de Robert Viseur (20)

La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...
La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...
La PI dans les espaces de co-création et d'innovation ouverte. Propriété inte...
 
L'écosystème régional du Big Data
L'écosystème régional du Big DataL'écosystème régional du Big Data
L'écosystème régional du Big Data
 
Piloter son appareil photo numérique avec des logiciels libres
Piloter son appareil photo  numérique avec des logiciels  libresPiloter son appareil photo  numérique avec des logiciels  libres
Piloter son appareil photo numérique avec des logiciels libres
 
Exploiter les données issues de Wikipedia
Exploiter les données issues de WikipediaExploiter les données issues de Wikipedia
Exploiter les données issues de Wikipedia
 
De l’open source à l’open cloud
De l’open source à l’open cloudDe l’open source à l’open cloud
De l’open source à l’open cloud
 
Développer ses photos avec RawTherapee
Développer ses photos avec RawTherapeeDévelopper ses photos avec RawTherapee
Développer ses photos avec RawTherapee
 
Convertir ses photos en N/B avec Gimp
Convertir ses photos en N/B avec GimpConvertir ses photos en N/B avec Gimp
Convertir ses photos en N/B avec Gimp
 
L'open hardware : l'ouverture au service de l'innovation
L'open hardware : l'ouverture au service de l'innovationL'open hardware : l'ouverture au service de l'innovation
L'open hardware : l'ouverture au service de l'innovation
 
Pechakucha (Mons) : Street Art à Mons
Pechakucha (Mons) : Street Art à MonsPechakucha (Mons) : Street Art à Mons
Pechakucha (Mons) : Street Art à Mons
 
L'open hardware dans l'électronique (et au delà...)
L'open hardware dans l'électronique (et au delà...)L'open hardware dans l'électronique (et au delà...)
L'open hardware dans l'électronique (et au delà...)
 
Analyse des concepts de Fab Lab, Living Lab et Hub créatif
Analyse des concepts de Fab Lab, Living Lab et Hub créatifAnalyse des concepts de Fab Lab, Living Lab et Hub créatif
Analyse des concepts de Fab Lab, Living Lab et Hub créatif
 
Open Source Hardware for Dummies
Open Source Hardware for DummiesOpen Source Hardware for Dummies
Open Source Hardware for Dummies
 
Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...
Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...
Pratiques innovantes dans le secteur automobile: du champion de produit à l'i...
 
Etude du secteur des prestataires FLOSS en Belgique
Etude du secteur des prestataires FLOSS en BelgiqueEtude du secteur des prestataires FLOSS en Belgique
Etude du secteur des prestataires FLOSS en Belgique
 
Hacker son appareil photo avec des outils libres
Hacker son appareil photo avec des outils libresHacker son appareil photo avec des outils libres
Hacker son appareil photo avec des outils libres
 
Comment gérer le risque de lock-in technique en cas d'usage de services de cl...
Comment gérer le risque de lock-in technique en cas d'usage de services de cl...Comment gérer le risque de lock-in technique en cas d'usage de services de cl...
Comment gérer le risque de lock-in technique en cas d'usage de services de cl...
 
Hacker son appareil photo, c'est possible !
Hacker son appareil photo, c'est possible !Hacker son appareil photo, c'est possible !
Hacker son appareil photo, c'est possible !
 
Comprendre les licences de logiciels libres
Comprendre les licences de logiciels libresComprendre les licences de logiciels libres
Comprendre les licences de logiciels libres
 
Impact of cloud computing on FOSS editors
Impact of cloud computing on FOSS editorsImpact of cloud computing on FOSS editors
Impact of cloud computing on FOSS editors
 
Une introduction à la co-création dans le domaine des TIC
Une introduction à la co-création dans le domaine des TICUne introduction à la co-création dans le domaine des TIC
Une introduction à la co-création dans le domaine des TIC
 

Créer un moteur de recherche avec des logiciels libres

  • 1. [ Jeudis du Libre, Mons – Mercredi 16 mai 2012 ] Créer un moteur de recherche avec des logiciels libres Auteur : Dr Ir Robert Viseur
  • 2. Qui suis-je ? • Robert Viseur • Ingénieur Civil, Mastère en Management de l'Innovation, Docteur en Sciences Appliquées. • Spécialisé dans les questions relatives à l'économie des logiciels libres et aux pratiques de co-création, ainsi que dans les technologies de recherche et de traitement de l'information (outils d'indexation, API,...). • Assistant à la Faculté Polytechnique de l'Université de Mons (www.umons.ac.be). • Conseiller technologique au CETIC (www.cetic.be). 2
  • 3. Qu'est-ce que le CETIC ? • Centre d'Excellence en Technologies de l'Information et de la Communication basé à Charleroi (Belgique). • Trois départements (et types de services) : • Software & System Engineering : qualité logicielle (fiabilité, sécurité, respect des normes internationales, processus,...). • Software & Services Technologies : architectures orientées services et sémantique. • Embedded & Communication Systems : prototypage de systèmes embarqués communicants et nouvelles technologies électroniques. 3
  • 4. De quoi allons-nous parler ? • Sujet : comment créer un moteur de recherche à base de logiciels libres ? • Plan : • Qu'est-ce qu'un moteur de recherche ? • Faut-il utiliser une base de données « fulltext » ou un pur indexeur ? • Jusqu'où est-il utile de développer soi-même ? • Exemples : création de moteurs de recherche spécialisés. 4
  • 5. Qu'est-ce qu'un moteur de recherche ? 5
  • 6. Définition « Un moteur de recherche est une application permettant de retrouver des ressources (pages web, articles de forums Usenet, images, vidéo, fichiers, etc.) associées à des mots quelconques » (Wikipedia). 6
  • 7. Étapes de fonctionnement • Crawler. • Collecter automatiquement les documents que l'on souhaite chercher sur un réseau local ou sur Internet. • Extraire. • Extraire le contenu textuel (texte et métadonnées) des ressources collectées. • Enrichir. • Trouver et ajouter de nouvelles informations sur base du contenu et de la structure du document. • Analyser • Analyser le contenu textuel (en vue de son indexation). • Indexer. • Transformer le contenu textuel en une forme facilitant la recherche par un ordinateur. • Rechercher. • Proposer une interface de recherche pour des utilisateurs (WUI) ou des logiciels (API). • Composer • Associer à un ensemble de sources de résultats complémentaires. 7
  • 8. Crawler • Réseau Internet: • Ouvrir les pages Web issues d'un ensemble de pages Web de départ. • Extraire des liens présents dans les pages Web. • Suivre ces liens (découverte automatique d'Internet). • Réseau local: • Suivre l'arborescence de répertoires, faire l'inventaire des fichiers disponibles. • Éventuellement, constituer une copie locale des fichiers à indexer. • Attention aux droits d'accès aux documents (sécurité)! 8
  • 9. Extraire (1/5) • L'indexation se fait sur du texte brut (texte ou métadonnées). • Besoin d'extraire... • le contenu textuel associé au document / à la ressource... • et/ou associé à son contexte (ex. : vidéo ou photo insérée dans un document HTML). 9
  • 10. Extraire (2/5) • Complexité variable. • Très simple pour du texte. • Simple pour du (X)HTML ou du XML (RSS, Atom, FOAF, etc.). • En pratique: – Texte avec des balises (tags). – Plus ou moins bien formé. • Exemple: HTML. 10
  • 11. Extraire (3/5) • Complexité variable (suite). • Besoin d'analyseurs spécialisés pour les formats binaires (ex. : photos, vidéos, documents bureautiques, etc.). • Extraction des métadonnées. – Exemple : tags ID3 dans les fichiers MP3. 11
  • 12. Extraire (4/5) • Complexité variable (suite). • Besoin d'analyseurs spécialisés pour les formats binaires (suite). • Extraction du texte. – Exemple : fichier dans le format ouvert ODT (fichiers XML et autres ressources « zippées ». • Plus difficile si formats non documentés. 12
  • 13. Extraire (5/5) • Complexité variable (suite). • Beaucoup plus difficile pour les documents scannés (OCR). (...) 13
  • 14. Enrichir (1/3) • Il est possible d'aller plus loin que la simple extraction des métadonnées et du texte. • Pour les documents HTML: • Compréhension des microformats. • Exemple: hCard / vCard. 14
  • 15. Enrichir (2/3) • Pour les documents HTML (suite): • Rétroingénierie (extraction structurée -> redonner du sens aux informations formatées en HTML). 15
  • 16. Enrichir (3/3) • Pour les contenus textuels: • Extraction d'entités nommées. • Exemple : reconnaître des noms de personnes, d'organisations, de villes, de pays, des dates, etc. • Autre possibilité : exploiter des logiciels, des bases de données ou des services externes pour enrichir le document. • Exemples: langue du document, catégorisation, etc. 16
  • 17. Analyser (1/2) • Généralement, cette tâche est réalisée par l'indexeur lui-même. • Degré de sophistication variable. • Base: segmentation du texte par tokenization. • Les phrases sont décomposées en éléments simples. • Possibilité (ou non) de configurer des règles de filtrage. • Exemple : suppression des mots trop courts, suppression des « stops words », etc. 17
  • 18. Analyser (2/2) • Degré de sophistication variable (suite). • Lemmatisation. • Transformation des mots à indexer en lemme (forme canonique). • Exemple: avoir = ai, as, a, avons, eussions eu, aurions, etc. • But: amélioration du rappel du moteur de recherche (parfois au détriment de la précision). • Nécessite un dictionnaire dans la langue du document à indexer. • Procédé voisin (plus basique) sur base de règles de troncature (stemming). • Exemple: algorithme de Porter. 18
  • 19. Indexer (1/3) • Création d'un index inversé. • Typiquement: structure mettant en correspondance des mots avec un ensemble de documents. • La recherche d'un ou plusieurs mots permet de facilement retrouver les documents le ou les contenant. 19
  • 20. Indexer (2/3) • Vue (très) simplifiée: <doc1> = <mot1> <mot2> <mot3> <doc2> = <mot4> <mot1> Index: <mot1> <doc1> pos=1 <mot2> <doc1> pos=2 <mot3> <doc1> pos=3 <mot4> <doc2> pos=1 <mot1> <doc2> pos=2 Requêtes: q = <mot4> -> <doc2> q = <mot1> OR <mot4> -> <doc2>, <doc1> 20
  • 21. Indexer (3/3) • Modèle de pertinence intégré. • Un classique: modèle TFxIDF. • La fréquence d'apparition de chaque terme dans un document est pondérée par la fréquence du terme dans le jeu de documents. • Évolutions possibles : classement fonction de la localisation, de la structure des liens (cf. Google Pagerank), etc. 21
  • 22. Rechercher (1/2) • Proposer une interface d'interrogation du moteur. • Pour humains (Web User Interface, WUI). • Pour logiciel (Application Programming Interface, API). • Raffinements possibles : catégorisation, clustering, facétisation, etc. 22
  • 23. Rechercher (2/2) • Remarque: Les moteurs de recherche commerciaux proposent une API (Google, Bing, etc.). • Passage progressif au modèle payant. • Conditions d'utilisation parfois restrictives. • Problèmes de fiabilité (cf. webométrie). • Mais utilité: • pour initier des crawls, • pour disposer de listes d'URLs ciblées (analyse en profondeur), • pour compléter des résultats de recherche (composition). 23
  • 24. Composer • Plusieurs sources de données peuvent être combinées. • Exemples: • principe du métamoteur, • lien avec des bases de données sémantiques. 24
  • 25. Faut-il utiliser une base de données « fulltext » ou un pur indexeur ? 25
  • 26. Bases de données simples (1/2) • Base de données = tables de données (lignes / colonnes) liées (via des clefs / identifiants). • Typage des données, contraintes d'intégrité. • Language d'interrogation standardisé proche du language humain (SQL). • Large disponibilité d'outils de création. • Par défaut, pas de fonctionnalité « fulltext ». 26
  • 27. Bases de données simples (2/2) • Recherche de texte possible par: • Recherche de sous-chaînes de caractères via "LIKE". • Sous-chaînes != mots. – Filtrage nécessaire avant affichage. • Recherche possible via des expressions régulières. -> pas adapté à de gros volumes de données (> 100.000 lignes par table). 27
  • 28. Base de données « fulltext » • Mêmes caractéristiques que pour la base de données simple, mais... • Création automatique d'un index inversé. • Performances variables: • volume de données supporté (nombre d'enregistrements, longueur du texte), • finesse d'analyse du texte (lemmatisation ou non, personnalisation de l'analyse ou non, etc.), • richesse variable du langage d'interrogation, • support variable des langues (si lemmatisation). • Le langage d'interrogation de l'index « fulltext » varie d'un SGBG à un autre. 28
  • 29. Pur indexeur • Outil dédié uniquement à la recherche fulltext. • Plus de structure tabulaire, de contraintes d'intégrité, ni de language d'interrogation universel. • En général: • conçu pour gérer de gros volumes de texte, • facilement embarquable dans un logiciel, • possibilités de personnalisation du comportement, • syntaxe d'interrogation riche, • notion de champs (sans contrainte). 29
  • 30. Technologies libres • Bases de données « fulltext » : • MySQL (mode « fulltext »), PostgreSQL (Tsearch2), Sphynx Search (extension pour MySQL et PostgreSQL). • Pur indexeur : • Lucene, ports Lucene, Xapian, Whoosh, etc. • Rapide comparatif : • Remarque: couvertures fonctionnelles variables. 30
  • 31. Jusqu'où est-il utile de développer soi-même ? 31
  • 32. Approches possibles • Trois approches possibles : • Utilisation d'outils intégrés. • A utiliser s'ils sont adaptés. • Développement ex nihilo (DIY). • A démarrer si un avantage fonctionnel peut être trouvé. • Développement sur base de composants libres. • A privilégier si pas d'outil intégré disponible. • Suite : présentation non exhaustive de logiciels libres disponibles. 32
  • 33. Existence d'outils intégrés (1/2) • Serveur d'indexation: SolR (lucene.apache.org/solr/). • Comprend: extracteurs (Apache Tika), indexeur (Lucene), API (JSON ou REST). • Métamoteurs: • Carrot² (métamoteur, clustering; carrot2.org). • Seeks (métamoteur, P2P; seeks-project.info). 33
  • 34. Existence d'outils intégrés (2/2) • Moteur de recherche intégré: • Nutch (nutch.apache.org). • Comprend: crawleur, extracteurs, indexeur, WUI et API. • Basé sur SolR. • Fonctionnel avec Internet ou Intranet. • Moteur de recherche complet décentralisé (P2P): • YaCy (yacy.net). • Comprend: crawleur, extracteurs, indexeur, WUI et API (OpenSearch). 34
  • 35. Plusieurs de langages de programmation adaptés au Web • Plusieurs languages de programmation libres adaptés au Web. • Exemples: Python, Perl, Java, Ruby, PHP, etc. • Possibilité de développements sur mesure... • Basé sur des bibliothèques réutilisables – Exemple : gestion des threads, ouverture d'URLs, analyse de textes, analyse HTML, etc. • Attention au syndrome NIH... 35
  • 36. Existence de composants spécialisés (1/3) • Crawler: • Wget. • Extraire : • Lecture de flux RSS ou Atom: • Feedparser (Java, Python), Simplepie (PHP), etc. • Extraction de texte et de métadonnées : • Apache Tika / POI (Java), utilitaires (xls2csv, catdoc, pdfinfo, etc.), iFilters (propriétaire, disponible sous Windows), etc. • Extraction d'articles (contenu utile) : • Boilerpipe (Java). • OCR: • GOCR, OCRAD, Tesseract, etc. 36
  • 37. Existence de composants spécialisés (2/3) • Analyser : • Stemming: • Snowball (Java). • Rétroingénierie de pages Web: • DEiXTo, Web Harvest, etc. • TAL: • OpenNLP (Java), NLTK (Python), etc. • Détection de langue: • Language-detection (Java), NLTK (Python), Text_LanguageDetect (PHP), etc. • Extraction d'entités (nommées ou pas): • OpenNLP (Java), UIMA (Java), Stanbol, etc. 37
  • 38. Existence de composants spécialisés (3/3) • Indexer : • Indexation (SGBD): • MySQL, PostgreSQL, etc. • Indexation (indexeur): • Lucene (Java), Whoosh (Python), Zend Search (PHP), etc. • Rechercher : • Classification: • Mahout (Java), NLTK (Python), Reverend (Python), etc. • Composer : • Métamoteur : Carrot². • Divers : • Bases de données: • DBPedia (Wikipedia), Geonames (base de données géographique), etc. • Remarque : existence de très nombreux petits projets spécialisés et parfois très utiles. 38
  • 39. Et pourquoi pas du logiciel propriétaire ? • Existence de technologies propriétaires reconnues pour l'indexation. • Exemples : Dtsearch, Oracle TEXT, etc. • Point fort : très large couverture fonctionnelle, performances de haut niveau. • Point faible : prix, « lock-in » technique. • Le monde Java est alimenté par des projets de recherche (publics ou privés) en traitement de l'information. • Exemples (logiciels libres) : UIMA, Stanbol, Nepomuk, etc. • Existence d'alternatives en Python (parfois) et, dans une moindre mesure, en Microsoft .Net (C#, ASPX, etc.). • Existence d'outils gratuits (mais non libres). • Exemples : TreeTagger, Sentiwordnet, etc. 39
  • 40. Exemples pratiques : création de moteurs de recherche spécialisés 40
  • 41. Exemple 1 : moteur de recherche de podcasts • Objectif : • Sur base d'une liste de podcasts (fichiers RSS)... • Indexer le contenu des flux RSS... • En distinguant... • Les descriptifs de chaque fichier RSS et... • Les descriptions de chaque ressource multimédia référencée... • Et permettre des recherches par mots-clefs. 41
  • 42. Outils réutilisés • Lecture RSS : Feedparser (Python). • Indexation : MySQL (fulltext). • Fonctionnement simple (extension du SQL) : • Création de la table avec index : – CREATE TABLE news ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(256), content TEXT, FULLTEXT (title, content) ) • Recherche par mot-clef : – SELECT id, title, content, MATCH (title,content) AGAINST ('linux') AS score FROM news WHERE MATCH (title,title) AGAINST ('linux') ORDER BY score 42
  • 43. Résultat • Exemples de résultat de recherche : 43
  • 44. Exemple 2 : moteur de recherche de flux RSS • Objectif : découvrir, indexer et rechercher des flux RSS. 44
  • 45. Outils • Indexation via Zend Search (voir exemple 3). • Développement spécifique: crawler. • Développement Python utilisant « urllib », « string », « sgmlparser » et « threading ». • Crawler (Python) spécialisé dans la découverte de flux RSS. • Principe: sur base d'une liste d'URL (amorce), • le crawler (multi-thread) ouvre les pages d'accueil, • identifie les flux RSS et Atom (et les ajoute à une liste), • extrait les noms de domaine des liens sortants, • et ajoute ces noms de domaine aux URLs à visiter. • But: explorer peu de pages HTML mais trouver un maximum de flux de syndication en un minimum de temps et avec un minimum de bande passante. 45
  • 46. Résultat • Collecte aisée de plusieurs dizaines de milliers de flux RSS et Atom, en français, anglais, néerlandais et espagnol. • Recherche avancée : par mots-clefs, par pays, par langue, restriction possible aux podcasts. 46
  • 47. Exemple 3: moteur de recherche d'entreprises • Point de départ: données de l'annuaire Logiciellibre.com. • Objectif : • A partir d'une base de données d'adresses d'entreprises actives dans le logiciel libre... • Créer un index Web spécialisé... • Pour identifier les entreprises actives sur certaines technologies et étudier leur environnement. 47
  • 48. Outils réutilisés • Crawl: Wget. • Indexation: Zend Search. • Extraction d'entités: Boilerplate, OpenNLP. • Visualisation: WUI et DOT. 48
  • 49. Wget (1/2) • Utilitaire GNU en ligne de commande, compatible Linux ou Cygwin, permettant de récupérer des fichiers en utilisant HTTP, HTTPS et FTP. • Commande de base : • wget www.cetic.be • Stocke localement la page située à l'adresse « www.cetic.be ». • Commande pour un crawl : • wget -r -l2 -P www -R jpg,gif,png 'http://www.cetic.be' • Crawl récursif de profondeur 2 pour le site « http://www.cetic.be » et résultats du crawl dans le répertoire « www » (+ rejet des photos). 49
  • 50. Wget (2/2) • Multiples options : • -r (crawl récursif) • Par défaut : respect de la convention « norobots » • -l (profondeur de récursion) • -P (répertoire cible pour le stockage) • -A et -R (filtrage des URLs par pattern) • --user-agent (« user agent » imposé) • ... • Plus d'infos : http://www.gnu.org/software/wget/manual/ . • Alternative : curl (puissant mais... pas de crawl récursif). 50
  • 51. Lucene (1/2) • Outil d'indexation supporté par la fondation Apache (lucene.apache.org). • Ecosystème étendu : • Utilisé dans Alfresco, Jahia, Liferay,... • Extension au cloud (ex. : CouchDB-lucene). • Beaucoup d'outils tiers : Luke (lecture d'un index), Solr (serveur de recherche ; sans crawler), Nutch (moteur de recherche avec crawler), Carrot2 (interface de recherche compatible OpenSearch et Solr),... • Cf. http://wiki.apache.org/lucene-java/PoweredBy . 51
  • 52. Lucene (2/2) • Le format d'index est devenu une sorte de standard. • Nombreux portages : Lucene.Net (. Net), PyLucene (Python), CLucene (C++) Plucene (Perl), Zend Search (PHP),... • Différents types de portages : par traduction littérale (compatibilité d'API d'abord), par traduction optimisée pour le langage cible (performances d'abord) et par binding (Python). • Points à surveiller : couverture fonctionnelle, version de l'index,... 52
  • 53. Zend Search (1/4) • Portage de Lucene en PHP. • API spécifique. • Support de la version d'index 2.3 (depuis Zend Framework 1.6). • Support de l'UTF-8 en interne. • Intégré au framework Zend mais utilisable séparément (taille sur disque : 734,3 ko). • Taille d'index théorique maximum = 2GB (système 32 bits). • Facilement hébergeable (installable sur un hébergement mutualisé type OVH ou Lost Oasis). 53
  • 54. Zend Search (2/4) • Plusieurs types de champs supportés : « Keyword », « UnIndexed », « Binary », « Text » et « UnStored ». 54
  • 55. Zend Search (3/4) • Syntaxe supportée lors des recherches : • Opérateurs booléens (« OR » ou « || », « AND » ou « && », « NOT » ou «  ! », « + », « - »), • indicateur de champs (« title: »), • jokers (« ? » ou « * »), • recherche par intervalle (dates ou chaines), • recherche floue (« ~ »), • recherches de proximité (« ~ »), • facteur de boost (« ^ »). • Possibilité de trier par champs. • Cf. http://framework.zend.com/manual/fr/zend.search.lucene.searching.html et http://framework.zend.com/manual/fr/zend.search.lucene.query-language.html . 55
  • 56. Zend Search (4/4) • Possibilité de personnaliser l'analyse des documents : • Utilisation d'un analyseur par défaut (Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive). • Possibilité de choisir un analyseur (compatible UTF-8, compatible avec les nombres,...). • Possibilité de configurer des filtres (« lowercase », « stop words », « short words »). • Possibilité de créer son propre analyseur. • Cf. http://framework.zend.com/manual/fr/zend.search.lucene.extending.html . • Possibilité de chargement direct de documents : formats HTML, MS Word / Powerpoint / Excel,... 56
  • 57. Encodage UTF-8 sous PHP (1/2) • PHP 5 (et <5) travaille en ISO-8859-1. • Problème ? • L'UTF-8 permet de présenter davantage de jeux de caractères que l'ISO 8859-1 mais... • L'UTF-8 stocke les caractères sur 1 ou plusieurs octets (1 seul en ISO- 8859-1). • Donc ? • L'UTF-8 est mieux adapté à l'Internet. • La chaîne d'outils utilisés (éditeur, langage de script, base de données, navigateur,...) doit connaître l'encodage utilisé pour comprendre les chaînes. • Exemple de problème : « Archive — Little I dreamed of being like L©guman ... now I eat carrots ». • Cf. http://openweb.eu.org/articles/jeux_caracteres . 57
  • 58. Encodage UTF-8 sous PHP (2/2) • Dans PHP : • La logique est différente de celle de Python, qui propose un type « string » et un type « Unicode ». PHP est très faiblement typé et travaille uniquement avec des chaines. • La conversion entre ISO et UTF-8 se fait à l'aide des fonctions « utf8_encode() » et « utf8_decode() ». Les autres conversions se font via « iconv ». • La manipulation des chaines en UTF-8 se fait à l'aide de la bibliothèque « mbstring ». • La détermination de l'encodage des caractères en entrée n'est pas triviale (headers HTTP parfois erronés, métadonnées HTML parfois absentes ou erronées, outils de détection pas toujours fiables,...). 58
  • 59. Indexation sous Zend Search (1/2) • Création d'un index et insertion : $index = Zend_Search_Lucene::create('/data/my-index'); $doc = new Zend_Search_Lucene_Document(); $doc->addField(Zend_Search_Lucene_Field::Text('title', $docTitle)); $doc->addField(Zend_Search_Lucene_Field::UnIndexed('url', $docUrl)); $doc->addField(Zend_Search_Lucene_Field::UnStored('content', $docContent)); $index->addDocument($doc); $index->commit() ; • Optimisation de l'index : $index->optimize(); 59
  • 60. Indexation sous Zend Search (2/2) • Ouverture d'un index et recherche : $index = Zend_Search_Lucene::open('/data/my-index') ; $query = Zend_Search_Lucene_Search_QueryParser::parse($input); $hits = $index->find($query); foreach ($hits as $hit) { echo $hit->score; echo $hit->title; echo $hit->url; } • Paramètres : opérateur par défaut, encodage des données,... 60
  • 61. Divers • Attention : wget affecte conventionnellement le nom « index.html » à l'adresse « / ». • Analyse des documents HTML : • native (cf. « Zend_Search_Lucene_Document_Html »), • manuelle non structurée (extraction des métadonnées -title, description,...- par expressions régulières et nettoyage du <body> via « strip_tags ») ou... • manuelle structurée (extraction structurée par expression régulière ou Xpath). • Lucene ne gère pas les contraintes d'intégrité. • Les doublons ne peuvent donc pas être évités via un champ « UNIQUE ». • Or, hash utile sur l'URL, voire sur le contenu (duplicate content). • Solutions possibles : test sur un champ unique dans l'index ou test sur base d'une table externe (ex. : hash dans SQLite). 61
  • 62. Mode de fonctionnement (1/3) • Étape 1 : constituer une base de données d'URLs (basé sur logiciellibre.com). • Étape 2 : • Détecter les éventuelles redirections, sites morts, etc (automatisable sous PHP avec « get_headers »). • Générer les requêtes wget correspondantes. • Lancer le crawl avec « wget ». • Étape 3 : lancer l'indexation des pages collectées par « wget ». • Utilité : identifier les prestataires actifs sur une ou plusieurs technologies particulières. 62
  • 64. Mode de fonctionnement (3/3) • Performances : Active index: index-fr: Create index: From 30-06-2011 13:39:16 to 30-06-2011 13:44:28. Size of the index: 4299 document(s) and 35,5Mo. Time: 258,957s. (60,237ms./doc.). Optimization time: 49,154s. Tests: Search (test): 25 result(s) (max.: 25) in 10,130ms. for 'python'. Search (test): 69 result(s) (max.: 250) in 4,425ms. for 'python'. Search (test): 25 result(s) (max.: 25) in 11,798ms. for 'python AND plone'. Search (test): 27 result(s) (max.: 250) in 7,111ms. for 'python AND NOT plone'. Search (test): 102 result(s) (max.: 250) in 8,569ms. for 'python OR plone^4'. 64
  • 65. Les petits plus... • Deux exemples : • Visualisation des relations des entreprises (écosystème). • Création de nuages de tags. 65
  • 66. Visualisation des relations (écosystème) • Exemple d'application : • Visualiser les relations entre entreprises,et entre les entreprises et leur environnement (communautés, organismes publics, etc.) • Comment faire ? 66
  • 67. Processus • Sur base des liens hypertextes entre les sites. • Comptabilisation des relations de page à page. • Utilisation du format DOT pour représenter le graphe de relations. • Utilisation du logiciel en ligne de commande Dot. • Remarque : existence d'outils plus évolués: Gephi (gephi.org), Tulip (tulip.labri.fr), etc. 67
  • 68. Résultat 68
  • 69. Création d'un nuage de tags • Exemple d'application: • Pour chaque site Internet repris dans l'index: • Avoir une vue des personnes importantes (employés, références, etc.). • Avoir une vue globale de l'entreprise (partenaires, technologies, normes, localisations, etc.). • Comment faire ? 69
  • 70. Processus • Base: copie locale des sites obtenue par wget. • Pour chaque page HTML d'un site Web: 1. Extraction du contenu textuel utile avec Boilerplate. 2. Analyse du contenu textuel avec OpenNLP. ● Extraction des noms de personnes. ● Étiquetage grammatical. ● Extraction des noms propres (personnes, entreprises, technologies, normes, etc.). 3. Tri (filtrage : fréquence, « patterns »). 4. Création des nuages de tags. 70
  • 71. Résultat 71
  • 72. Principales difficultés • Principalement liées à OpenNLP • Fiabilité globalement correcte mais... • Sensibilité vis-à-vis du texte donné en entrée. – Exemple : <START:person> Andy Gibbs 1 <END> Felipe Contreras 1 Frederik Pasch 1 Heiko Zuerker 1 Javier Viguera <START:person> 1 <END> Luca Ceresoli 1 Marcelo Roberto Jimenez 1 Marcus Osdoba 1 Matt Johnson 1 <START:person> Paul Burton 1 Paul Jones 1 <END> – Importance de la conversion HTML -> texte. • Nombre limité de fichiers d'entrainement. – Exemple: étiquetage grammatical (disponible en anglais, néerlandais ou espagnol, mais pas en français). • Le filtrage sur base de la fréquence d'apparition limite la présence de tags peu pertinents. 72
  • 74. Conclusion (1/2) • Large variété d'outils libres disponibles: • logiciels intégrés, • Composants réutilisables, • bibliothèques de base. • Capacité des outils libres à répondre à des besoins variés mais... • Concepts de base à maîtriser. • Intégration (souvent) moindre comparé à des équivalents propriétaires (ex.: Oracle Text). 74
  • 75. Conclusion (2/2) • Sujets peu ou prou abordés : • Problématique de passage à l'échelle. • Temps des crawls (et leur ciblage). • Temps d'analyse des contenus. • Gestion des grands volumes de données (> million de documents). • Technologies Cloud (ex.: bases NoSQL, Hadoop, etc.). • Développement de moteurs de recherche sémantiques. • Cf. Fauconnier et Roumier (2011). 75
  • 76. Merci! Merci pour votre attention. Des questions ? 76
  • 77. Ressources et liens utiles • Robert Viseur (2012). « De l'annuaire de sites à la recherche sociale: 15 ans d'évolution! ». Etudiant Polytech d'un jour (UMONS). URL : http://www.robertviseur.be/news-20120225.php . • Robert Viseur (2011). « Développement d'un moteur de recherche avec Zend Search ». RMLL 2011. URL : http://www.robertviseur.be/news-20110721.php . • Jean-Philippe Fauconnier et Joseph Roumier (2011). Semantic Search Engine Dedicated to Music & Musicians. Music Linked Data Workshop, London, May 12, 2011. URL : http://shrl.be/000092 . • Robert Viseur (2010). « Introduction to libre « fulltext » technology ». RMLL 2010. URL : http://www.robertviseur.be/news-20100710.php . • Erik Hatcher et Otis Gospodnetić (2004). « Lucene in Action ». Manning Publications Co. • Soumen Chakrabarti (2003). « Mining the Web - Discovering Knowledge from Hypertext Data ». Morgan Kaufmann. 77
  • 78. Contact Dr Ir Robert Viseur Email (@CETIC) : robert.viseur@cetic.be Email (@UMONS) : robert.viseur@umons.ac.be Téléphone : 0032 (0) 479 66 08 76 Internet : www.robertviseur.be Cette présentation est diffusée sous licence « CC-BY-ND ». 78