Overview

DEPENDENCIES
============

	* python
	* g++ 4.7 (for c++11 support)
	* google-test (which may be automagically downloaded when building)

BUILD
=====

Configure and compile

	./waf configure
	./waf

The compiler can be set using the CXX environment variable when configuring.
For instance:
	
	CXX=g++4.7 ./waf configure

Include search paths can be added while configuring using the -i or --include
option. For instance:

	./waf configure -i /usr/local/include

In the same way, static libraries search paths can be added using the -l or
--library option. For instance:

	./waf configure -l /usr/local/lib

TESTS
=====

To compile and run the unit tests, use the option --check when compiling:

	./waf --checkall

The test suite can also be runned manually for more details (such as the tests
count etc.):

	./build/test

DOCUMENTATION
=============

To generate the documentation, use:
	
	doxygen doxyfile

The documentation will be generated in the doc/ directory.


REPONSES AUX QUESTIONS
======================

1. Decrivez les choix de design de votre programme

	Nous utilisons deux variantes de Patricia trie dans le projet:
		- une version utilisant un vecteur pour stocker les pointeurs vers les noeuds fils, utilisé dans le
		  TextMiningCompiler pour la création du patricia trie. Une fois construit, il est écrit transformé
		  dans le format de la deuxième variante pour être écrit dans le fichier binaire représentant le dictionnaire.
		- une deuxième version, inspirée de Germann et al. “Tightly Packed Tries: How to Fit Large Models into
		  Memory, and Make them Load Fast, Too”, dans laquelle les noeuds sont stockés de manière contigue en
		  mémoire, permettant ainsi de les charger plus rapidement.


2. Listez l’ensemble des tests effectués sur votre programme (en plus des units tests)

	En plus des tests fonctionnels que nous avons effectué afin de comparer nos résultats avec ceux de la référence,
	nous avons ajouté un certain nombre de tests unitaires (utilisant la bibliothèque google-test):
		- calcul des distances de levenshtein (tests/distance.cc) sur des chaines "simples"
		- recherche dans un arbre simplifié (utilisant des éléments de syntaxe du C++11 afin de décrire simplement
		  les tries)
		- validité du ref-encoding effectué sur les labels des noeuds de l'arbre


3. Avez-vous détecté des cas où la correction par distance ne fonctionnait pas (même avec une distance élevée) ?

	Non


4. Quelle est la structure de données que vous avez implémentée dans votre projet, pourquoi ?

	Nous avons choisi d’utiliser un Patricia trie. Ce choix se justifie principalement par l’existence
	d’un algorithme de recherche approximative (répondant donc à la problématique du sujet) simple et
	efficace (avec une complexité en O(taille du mot) pour une distance maximum de 0, c’est-à-dire une
	recherche exacte). Cette structure offre également d’autres avantages, moins importants pour ce projet.
	De plus, le patricia trie permet une optimisation en espace importante sans perte de performance sur
	l’algorithme de recherche ni de grande difficulté d’implémentation supplémentaire, nous n’avions donc
	aucune raison de ne pas le préférer au Trie simple.


5. Proposez un réglage automatique de la distance pour un programme qui prend juste une chaîne de caractères en
entrée, donner le processus d’évaluation ainsi que les résultats

	Un réglage automatique simple serait de calculer la distance maximale en fonction de la longueur du mot
	(en effet, une distance d’édition de 2 est moins probable pour un mot de 3 lettres que pour un mot de 12 lettres).


6. Comment comptez vous améliorer les performances de votre programme

	Il est possible d’améliorer les performances du programme en parallélisant le traitement des requêtes, à
	l'aide d'une file permettant de répartir la charge sur les différents threads.


7. Que manque-t-il à votre correcteur orthographique pour qu’il soit à l’état de l’art ?

	Ce programme ne constitue qu’une partie basique d’un correcteur orthographique, dont notamment:
	- proposer une interactivité dans le choix du mot corrigé (proposer plusieurs des corrections
	  les plus probables, qui sont acceptées ou refusées par l’utilisateur)
	- prendre en compte le contexte, ce qui permet plusieurs choses, telles que la correction grammaticale,
	  la pondération des mots proposés, etc

	Hunspell est un correcteur orthographique open-source proposant, entres autres, ces améliorations