---
# System prepended metadata

title: 'WEM : Web Mining Laboratoire n°1'

---

# WEM : Web Mining Laboratoire n°1
Fabien Mottier, Charles-Lewis Jaggi, Dylan Netuschil

## Description du programme
Notre programme crawle et indexe des informations sur des films présents sur le site www.allocine.fr Il permet également de faire des recherches sur les films indexés. Le programme crawle uniquement les liens du site qui spécifiquent à un film (pattern : http://www.allocine.fr/film).

Notre programme comporte 2 classes. La première **Labo1Controller** est la classe de base qui contient la fonction main. C'est dans la fonction main qu'on choisit lorsqu'on veut faire une recherche ou crawler. Cette classe contient 2 méthodes. La première **crawl(int type)** permet de lancer le crawling : type 1 pour remplir wemlabo1 et type 2 pour wemlabo2. Le type 1 sert à tester l'indexation et le type 2 utilise une indexation spécialisée. La deuxième **query(field, text)** permet de faire des requêtes de recherche. **Le résulat des requêtes se trouvera dans un fichier texte dans le même répertoire que le jar du programme.** Les Recherches se font en fonction du titre ou du réalisateur.


La deuxième classe **Labo1Crawler** est une redéfinition de la classe **WebCrawler**. Cette classe redéfinit les fonctions **Visit et shouldVisit** de la classe parent. Cette classe visite donc toutes les liens du nom de domaine choisi et qui correspondent à nos critères. Pour chaque lien visité, nous récupérons et indexons les informations de la section **Les éléments de la partie 2**

## Utilisation du programme

**java -jar labo1.jar crawl1** => lance un crawler qui indexe l'id de l'objet de la page visitée à fin de controller l'indexation

**java -jar labo1.jar crawl2** => lance un crawler utilisant l'indexation spécialisée

**java -jar labo1.jar searchTitle <text du titre>** => effectue une recherche de titre sur les tous les mots qui suivent searchTitle

**java -jar labo1.jar searchRealisator <nom du réalisateur>** => effectue une recherche de réalisateur sur les tous les mots qui suivent searchRealisator


## 2. Indexation spécialisée
### Les éléments principaux

- url
- domain
- path
- subDomain
- parentUrl
- anchor
- 
### Les éléments mis en avant
- title : Titre
- notes : Note
- realisateur : Réalisateur
- actors : Acteurs
- date : Date de sortie
- synopsis : Synopsis

Comme nous indexons des films, nous avons sélectionnés ses champs qui nous paraissaient importants et qui sont mis en avant par le site. Certains comme les genres de films pourraient intéressants, mais la structure de la page web ne le permettait pas simplement.

## Questions Théorique

### Question 4.1
Il faut faire attention à deux choses : 
- La langue appliquée sur le site
- La langue du contenu essentiel de la page.

En effet, un site peut être en français, mais le contenu que l'on veut indexer peut être dans une autre langue.
Il faut donc prévoir l'indexation de ces champs en dupliquant les champs relatifs à la langue pour chaque langue. Il faut aussi mettre un système en place pour que lorsque l'on fait une recherche, il soit possible de préciser une langue.

### Question 4.2

La recherche floue ou (fuzzy search), permet d'effectuer des recherches avec des mots qui sont orthographiquement proches du mot recherché, comme par exemple un mot et son pluriel. Cela permet d'être tolérant aux fautes de frappe et orthographique.

Solr à implémenté cette fonctionnalité avec un algorithme du plus proche voisin qui emploie la notion de distance de Levenshtein. Elle travaille sur deux notions: La distance et le nombre de lettres différentes entre deux mots (que ce soit un ajout ou un retrait de lettre vis-à-vis du mot recherché). Pour pouvoir faire ce type de recherche, il faut employer le caractère "~" en fin de mot et donner la distance que l'on veut. Par exemple "animal~1" donnera tous les mots de distance 1 avec animal. Si on ne donne pas de distance, mais juste le "~" On va prendre tous les mots qui commence par les lettres situées avant le "~". Il est aussi possible de donner un taux de similarité compris entre 0 et 1 après le "~", le taux représente la similarité avec le pattern fournit avant le "~".

Pour le prénom Caitlin, il y a certaines fois une grande distance ce qui peut ralentir fortement la recherche, par exemple avec Catelynn, il a une distance de 4.

Pour améliorer la recherche, on peut prendre en compte la prononciation des mots. Il existe beaucoup d'algorithmes, mais un des plus commun est Soundex (https://web.archive.org/web/20120815144757/http://www.rubyglob.com/advanced-solr-filters-with-phonetics/).


![](https://i.imgur.com/ds5kHyr.png)

![](https://i.imgur.com/LiThLOg.png)

