VBTextFinder : un moteur de recherche de mot dans son contexte

en VBA, VB6 et VB9

Documentation : VBTextFinder.html

Code source : VBTextFinder.vbproj.html

Par Patrice Dargenton : patrice.dargenton@free.fr

http://patrice.dargenton.free.fr/CodesSources/index.html

www.vbfrance.com/listeauteur2.aspx?ID=1124

Version 1.03 du 18/05/2008

# Introduction

VBTextFinder permet de retrouver l'ensemble des phrases (et paragraphes) contenant un mot donné que l'on recherche dans un corpus documentaire préalablement indexé (un corpus est un ensemble cohérent de documents).

Comment ça marche ? c'est très simple : lors de l'indexation d'un document, les phrases sont découpées en mots, et une collection de mots est construite en complétant la liste des numéros de phrase contenant ce mot, toutes les phrases étant conservées en intégralité avec l'index des mots qui en font partie. Ensuite, pour retrouver l'ensemble des phrases contenant un mot donné présent dans l'index, il suffit de parcourir la liste des phrases référencées par ce mot, cette recherche étant quasi-instantanée, même avec de gros document. Tout le travail est fait dans l'objet Collection de VB (une hashtable dans la version DotNet).

En bonus, certaines statistiques sont disponibles. De plus, si on précise des codes mnémoniques courts associés de façon unique à chaque document indexé, alors VBTextFinder est capable de produire un index alphabétique ou fréquentiel avec ces codes mnémoniques. Par exemple, si j'indexe plusieurs documentations de mes logiciels avec les codes mnémoniques suivants :

VBWaveComp.txt (VBWC)

VBSpamCheck.txt (VBSC)

VBLocker.txt (VBLck)

VBBrainBox.txt (VBBB)

VB2Html.txt (VB2H)

ODBCDotNet.txt (ODBCDN)

DVDClass.txt (DVDC)

VBTextFinder peux alors produire un index alphabétique dont voici un extrait :

...

applicable (1 : VBBB)

applicables (3 : VBBB)

application (45 : DVDC, ODBCDN, VB2H, VBBB, VBLck, VBSC, VBWC)

applications (16 : DVDC, VBBB, VBLck)

appliquant (1 : VBBB)

appliqué (2 : DVDC, VBBB)

appliquée (1 : VBBB)

appliquées (4 : VBBB)

appliquer (14 : ODBCDN, VBBB, VBSC)

appliqués (2 : DVDC, VBSC)

appliquez (1 : VBWC)

...

et un index fréquentiel dont voici un extrait :

...

57 : audio (DVDC, VBLck, VBWC)

57 : access (DVDC, ODBCDN, VB2H, VBBB)

56 : windows (DVDC, ODBCDN, VB2H, VBBB, VBLck, VBSC, VBWC)

56 : votre (DVDC, ODBCDN, VBBB, VBLck, VBSC, VBWC)

55 : spam (VBSC)

55 : patrice (DVDC, ODBCDN, VB2H, VBBB, VBLck, VBSC, VBWC)

55 : entre (DVDC, ODBCDN, VBBB, VBSC, VBWC)

54 : dargenton (DVDC, ODBCDN, VB2H, VBBB, VBLck, VBSC, VBWC)

53 : votant (DVDC)

53 : règles (VBBB, VBSC, VBWC)

...

Il faut choisir un code mnémotechnique facile à retenir, si on ne précise rien, on utilise par défaut Doc n°1, Doc n°2..., ou rien s'il n'y a qu'un seul document. Ces codes sont stockés dans un fichier ini (simple fichier texte) pour faciliter l'étiquetage.

J'ai développé ce code en un week-end !... mais je le peaufine depuis plus de 4 ans ! je me suis enfin décider à le publier ; la version DotNet possède quelques fonctionnalités en plus et sa présentation des résultats est plus pertinente, cependant j'ai fait attention à ce que l'index soit compatible entre les versions.

Autre bonus : il y a une version Excel ainsi qu'une version Word : les utilisateurs du VBA Excel ou Word sont encore plus nombreux que ceux de VB ! ces deux versions sont bien la preuve que l'environnement VBA est un environnement de développement complet en Visual Basic, il n'y a guère que la compilation optimisée qui manque. Vous pouvez constater que le code source est strictement identique à 100% à celui de VB6, j'ai juste utilisé la compilation conditionnelle pour switcher l'initialisation du code entre les différentes versions. En fait, seuls les contrôles de l'interface ne peuvent pas être copiés/collés entre VB6 et VBA Word ou Excel, mais cela fonctionne entre Word et Excel. Les contrôles ne sont pas identiques, mais tout est compatible en faisant attention à deux ou trois subtilités.

Table des matières

Introduction. 1

Fonctionnalités. 3

Fonctionnalités supplémentaires de la version DotNet 3

Précisions sur la gestion des accents. 3

Mode d'emploi 4

Exemple : recherche dans les proverbes. 4

Pour indexer une série de fichiers .txt 4

Pour indexer une série de fichiers .doc ou .htm ou .html 4

Pour indexer une arborescence de fichiers. 4

Menus contextuels. 4

Arguments possibles pour la ligne de commande. 4

Exemples de génération de mots clés. 5

VBSpamCheck. 5

DVDClass. 5

ODBCDotNet 5

VB2Html 5

VBBrainBox. 5

VBWaveComp. 5

VBLocker 5

Améliorations possibles. 5

Ergonomie. 5

Optimisations. 6

Options d'indexation. 6

Version du fichier d'index. 7

Projets. 7

Recherche de plusieurs mots. 7

Recherche d'une expression exacte. 7

Requêtes Linq. 7

Installation : les pré-requis. 8

Historique des versions. 8

Version 1.03 du 18/05/2008. 8

Version 1.02 du 10/05/2008. 8

Version 1.01 du 21/04/2008. 8

Version 1.00 du 17/04/2006. 8

Version 0.01 du 10/04/2004 : Première version. 8

Liens. 8

Logiciels équivalents. 8

Indexation d'autres types de document 9

Algorithmes. 9

Divers. 10

Dictionnaires. 10

Autres logiciels. 11

# Fonctionnalités

- Exportation : les résultats de recherche peuvent être copiés / collés dans le presse papier ;

- Choix du nombre de paragraphes à afficher avant ou après chaque phrase afin de mieux saisir le contexte dans certain cas (1, 2 ou 3 paragraphes avant et après dans les versions VBA et VB6, et illimité dans la version DotNet via la barre de défilement à gauche) ;

- Gestion des fichiers Word .doc ou bien Html : il y a une procédure pour convertir automatiquement le fichier en .txt en utilisant l'automation de Word ; on peut aussi utiliser les menus contextuels dans l'explorateur de Windows afin d'indexer rapidement un document à la volée ;

- Affichage d'un indicateur si le mot est trouvé directement pendant la frappe, avec le nombre d'occurrences correspondant ;

- Mémorisation des mots recherchés successivement (comme dans la barre d'outil de Google) ;

- Mode hypertexte : il est activé lorsque l'on fait un double-clic sur un mot dans les phrases affichées dans la zone des résultats de recherche (pour les versions VBA, il faut ensuite cliquer sur le bouton Rechercher) ;

- Sauvegarde : si au moment de quitter l'application on souhaite conserver l'index, une sauvegarde de l'index est effectuée dans le fichier VBTextFinder.idx. Au lancement de VBTextFinder, si ce fichier est présent (dans le dossier de l'application), on propose de le recharger ;

- Création d'un index des mots dans Word (avec la liste des codes document le contenant) selon un tri alphabétique ou fréquentiel au choix (cf. la fonction équivalente de VBDico) : les versions VBA et VB6 sont limitées en taille, Word refusant de trier une trop grande liste de mots (il suffit de le tester sous Word : menu Tableau : Trier...) ; Astuce : il suffit d'utiliser la version DotNet, elle fonctionne aussi avec un index créé à partir des versions VBA et VB6, et elle n'utilise pas le tri de Word.

# Fonctionnalités supplémentaires de la version DotNet

- Gestion des accents en option (en VBA ou VB6 les accents sont toujours pris en compte, en DotNet, les accents sont ignorés par défaut), voir ci-dessous pour le détail ;

- Sélection de plusieurs fichiers à indexer (ou a convertir au préalable), par exemple *.txt, *.doc ou *.html ;

- Vérification si un document est déjà indexé (via le nom du fichier) : dans la version VBA/VB6, ce n'est pas vérifié, de sorte qu'on peut ajouter plusieurs fois le même document, et cela produit des anomalies dans la recherche (les modes phrase et paragraphe ne sont plus tout à fait cohérents) ;

- Création d'une liste de mot clés : il s'agit de la liste des n mots les plus fréquents, une fois que l'on a retiré les mots non signifiants tel que : de le la et..., voir les exemples ici ;

- Gestion d'un dictionnaire : en décochant "Mots dico" les index seront générés sans les mots qui font partie du dictionnaire, ce qui permet de lister tous les mots propres indexés ; le dictionnaire utilisé se trouve ici :

www.pallier.org/ressources/dicofr/liste.de.mots.francais.frgut.txt (3.6 Mo ou 800 Ko ici)

- Désallocation en RAM : instantanée en DotNet, et assez long en VBA et VB6 : de l'utilité du ramasse-miettes !

## Précisions sur la gestion des accents

- La version VBA/VB6 indexe les accents, de sorte qu'il faut obligatoirement saisir les mots avec les accents pour pouvoir les retrouver (on risque donc de ne pas trouver les mots auxquels les accents manquent). La version DotNet peut indexer avec ou sans les accents, c'est configurable (par défaut les accents ne sont pas indexés, on ne risque donc pas d'oublier des mots lors d'une recherche) ;

- La version VBA/VB6 indexe "cœur" avec œ collé et peut trouver la phrase même si on tape oe séparé : on peut donc taper aussi bien cœur que coeur pour trouver cœur ou coeur indistinctement ; tandis qu'avec la version DotNet, cela dépend si on indexe les accents ou pas : si oui, alors ces lettres sont distinctes et donc indépendantes (ce qu'on ne peut pas faire en VBA/VB6), et si les accents ne sont pas indexés, cela fonctionne comme dans la version VBA/VB6.

# Mode d'emploi

## Exemple : recherche dans les proverbes

Le fichier d'exemple Proverbes.txt fourni est situé dans le même répertoire que l'application VBTextFinder : cliquez sur le bouton "Ajouter le(s) document(s)", ensuite fermez simplement le document VBTextFinder.ini qui s'est affiché : c'est prêt : vous pouvez commencez une recherche : tapez par exemple temps dans la zone de recherche : vous obtenez les proverbes contenant le mot temps dans le proverbe ou bien son explication.

## Pour indexer une série de fichiers .txt

Ces fichiers doivent tous figurer dans un dossier unique. Dans ce cas, il suffit de sélectionner le filtre *.txt (il est déjà sélectionné par défaut, sinon faire un double-clic dans la zone "Chemin des documents à indexer"), puis de cliquer sur le bouton Ajouter le(s) document(s).

## Pour indexer une série de fichiers .doc ou .htm ou .html

La procédure est la même avec les filtres *.doc ou *.htm?.

## Pour indexer une arborescence de fichiers

VBTextFinder ne peut pas le faire directement, mais si les noms des fichiers sont uniques, il est possible de lancer une recherche sur ces fichiers, puis de les copier/coller dans un seul dossier.

## Menus contextuels

VBTextFinder peut fonctionner via l'ajout de menus contextuel. Pour cela, vous pouvez les ajouter via le bouton +, le menu "Indexer pour une recherche (VBTF)" est alors ajouté pour les clés suivantes (HKCR) de la base de registre :

Fichier texte : .txt : txtfile

Fichier MS-Word : .doc : Word.Document.8

Fichier Html : .htm ou .html : htmlfile

Dossier : Directory

Ces menus permettent d'indexer directement les types de document via le menu contextuel qui apparaît lorsque l'on clique avec le bouton droit de la souris sur un de ces types de fichier dans l'explorateur de fichiers. Ces menus fonctionnent également pour des raccourcis vers un de ces types de fichier. Ces menus ne sont pas adaptés pour une utilisation avec plusieurs fichiers sélectionnés (car cela ouvre plusieurs instances de VBTextFinder, utilisez plutôt un filtre *.txt dans ce cas).

Une clé pour les fichiers .idx est également créée pour ouvrir les index VBTextFinder dans le logiciel.

Le bouton - permet de retirer proprement ces clés ajoutées (désinstallation du logiciel, ou bien en cas de déplacement du logiciel).

## Arguments possibles pour la ligne de commande

Pour la version DotNet, vous pouvez passer un chemin complet d'un dossier ou fichier à indexer (1 et 1 seul). Vous pouvez aussi passer un chemin complet vers un fichier index .idx : dans ce cas, VBTextFinder s'ouvre directement sans poser de question, prêt à utiliser (idéal pour un moteur de recherche déjà configuré sur un corpus préalablement indexé).

Pour la version VBA/VB6, c'est pareil sauf que l'indexation d'un dossier n'est pas traitée.

# Exemples de génération de mots clés

## VBSpamCheck

Nombre de mots distincts indexés : 1238

spam courriel vbspamcheck com faux courriels antispam positifs www spams outlook fr html fichier express réception id free domaines clé boîte base logiciel légitimes exemple domaine cas patrice message dossier dbx dargenton

## DVDClass

Nombre de mots distincts indexés : 1504

html oeuvre votant imdb dvdclass classement www films com film votants votes champ single dvd version fr long type voté null text50 oeuvres interdit données code scores calcul titre notes web moyenne identifiant table mnémonique index cas affinités 2 unique partir exemple critiques base auteur access 1 0

## ODBCDotNet

Nombre de mots distincts indexés : 1016

1 odbc excel fichier dsn version données 2007 pilote 11 source exemple via microsoft 0 type requêtes access 8 nombre fonction champs base windows requête valeurs sql http driver défaut passe décimal

## VB2Html

Nombre de mots distincts indexés : 547

www com vb code 2 version html vb2html aspx 2005 vbfrance projet id codeproject asp fichier useritems mode fichiers bricomix 2007 vbtohtml projets mots génération convertir clés 2008

## VBBrainBox

Nombre de mots distincts indexés : 1865

logique vbbrainbox base faits règles données 1 règle expert 0 net fr 2 turbo exemple application fiabilité version système ordre html floue chaînage access variable complexité cas www variables méta x valeur ia problème expertise dbtofile http com systèmes voir régime problèmes np monotone mdb

## VBWaveComp

Nombre de mots distincts indexés : 1549

0 1 audio db 2 g compression www kbps spectre com gd 10 signal fréquence 11 fréquences cd fichier wav qualité tfr media 5 3 version vbwavecomp log khz fichiers 12 wma2 wma perte calcul bits 96 windows énergie rapport 13 logiciel aspx 50

## VBLocker

Nombre de mots distincts indexés : 1077

com logiciel www code version licence aspx 2 clé asp net codeproject vblocker client activation versions vb6 protection microsoft cryptage 0

# Améliorations possibles

## Ergonomie

- Sélectionner les mots trouvés, ou bien les mettre en gras : utiliser une zone RTF/RichEdit ou bien Html, tout en conservant le mode hypertexte par défaut sur chaque mot affiché (en html, cf. le dictionnaire en ligne ultime : www.tv5.fr/TV5Site/alexandria/definition.php) ; Paginer les résultats de recherche comme dans Google (pour afficher plus rapidement les premiers résultats) ;

- Interface avec onglets : Rechercher, Indexer et Outils ;

- Trouver une autre ergonomie pour pouvoir agrandir uniquement le paragraphe sur lequel on est, puis le rétrécir, sans perdre le mot sélectionné (tout en conservant le mode hypertexte sur double clic) ;

- Boutons suivant et précédant, comme dans un navigateur : recherche suivante ou précédente (lorsque l'on revient en arrière, bien se repositionner sur le dernier mot cliqué, comme une navigation hypertexte) ; autres boutons utiles : occurrence suivante ou précédente du mot en cours, comme dans la barre d'outils Google (laquelle contient un bouton pour chaque mot, chaque nouveau clic passe à l'occurrence suivante du mot) ;

- Bouton pour effacer l'index en RAM, sans avoir à quitter ;

- Sélection des fichiers à indexer : pouvoir sélectionner plusieurs fichiers (sans avoir à faire *.txt) ;

- ComboBox avec auto-complétion pour la saisie d'un mot à rechercher, fonctionnant comme la barre d'outil Google : compléter avec une précédente recherche (grâce à l'historique des recherches), et compléter aussi avec les mots existants (comme Google Suggest). Les précédentes recherches sont affichées dans la première moitié de la zone, tandis que les suggestions sont affichées dans la seconde : pourquoi choisir quand on peut tout avoir !

- Comptage du nombre de mots indexés par document (oDoc.iNbMotsIndexes), et calcul des autres statistiques concernant les documents indexés : nombre de paragraphes, phrases... ;

- Séparateur de phrase : il faudrait considérer 2 caractères successifs au lieu d'un seul caractère ; par exemple le point ne délimite pas toujours une phrase, il peut s'agir d'un point décimal ou bien d'un séparateur de nom de domaine dans un lien hypertexte. Considérer donc un point suivi d'un espace ou bien d'un retour à la ligne pour séparer les phrases ;

- Possibilité de lire les fichiers de configuration externes au logiciel, tel que la liste des mots fréquents, les séparateurs de phrases et mots (sauf les caractères invisibles tels que tabulation ou retour à la ligne, à moins de coder en xml).

## Optimisations

- Ignorer les mots courants pour réduire la taille de l'index, soit en limitant le nombre d'occurrences dans les phrases d'un mot (cela ne fonctionnera qu'à partir de gros document), soit en se basant sur une liste de mot courant (définition assez floue : mot très fréquents et non signifiant : et, est, dans, le, ...). Compter quand même toutes les occurrences mais sans conserver les numéros de phrases ; Ignorer les mots courant pourrait être une option d'indexation ;

- Charger l'index des phrases indépendamment de celui des mots afin de lancer plus rapidement le logiciel (on n'a besoin des phrases que pour les afficher, pas pour savoir si un mot est présent). Tout l'index est chargé en RAM, si l'index est vraiment trop gros, c'est-à-dire plus gros que la RAM physique disponible, il faudra probablement dans ce cas stocker les phrases dans une base de données (l'index devrait tenir en RAM dans tous les cas, à moins de faire un moteur de recherche généraliste sur le web par exemple) ;

- Compression des phrases et les mots de l'index du dictionnaire suivant une arborescence : construire un arbre des débuts et fins de mot et de phrase possibles à partir des documents indexés. Voir les liens.

## Options d'indexation

- Mots contenant des chiffres : option pour n'indexer que les lettres, en ignorant les nombres, et chaque chiffre devient un séparateur de mot ;

- Ignorer ou pas les accents (mais cela pose le problème de la compatibilité d'un index avec une recherche : sauver l'état des options dans l'index, et ensuite ces options ne peuvent plus être modifiées ; autre problème : mélange de documents indexés avec ou sans accent : comment traiter ce cas ?) ;

- Gestion des caractères doubles : oe ae... on pourrait les indexer deux fois (collés ou pas) pour être sûr de les trouver dans tous les cas (utile seulement si on indexe les accents en DotNet, car sinon on a déjà cette fonctionnalité) ;

- Gérer les options d'indexation en ligne de commande : liste des fichiers à indexer, fichier ini (pour les codes document), fichier index à utiliser, ... cela permettrait de faire des batchs de mise à jour automatique d'un index en fonction du contenu d'un dossier ;

- Gestion automatique des codes document : dans la fenêtre résultat, on a la place pour indiquer le nom du fichier complet, mais pour l'affichage des statistiques c'est utile d'avoir un code document (à moins que les noms de fichiers soient assez courts : option automatique dans ce cas) ; idée : insérer le code document directement dans le fichier Word, de façon à l'associer automatiquement au document lors de son indexation ; option pour ignorer les codes document : ne plus afficher le fichier .ini ;

## Version du fichier d'index

- Inclure la date et l'heure de chaque document indexé (pour pouvoir détecter les mises à jour requises) ; autre idée : l'URL du document en option afin de pouvoir produire un lien vers ce document (il faudrait pouvoir pointer directement sur le mot trouvé du document) ;

- Inclure la version du logiciel d'indexation (en particulier VBA, VB6 ou DotNet), et inclure les options d'indexation : avec accents, ... ;

# Projets

- Indexation des documents Excel : voir XL2Csv ;

- Mots clés : exclure les verbes conjugués, ou alors comptabiliser leur fréquence avec le verbe à l'infinitif (mais comment reconnaître un verbe conjugué ? via une liste complète ?) ;

- Extraire toutes les citations entre << ou " ;

- Comparer la fréquence des mots d'un texte (sans les mots courants) par rapport à leur fréquence en général, pour donner une idée de l'importance donnée à ces mots dans ce texte ;

- Suggérer une orthographe différente en cas d'échec (comme Google) : utiliser une distance d'édition lors de l'indexation ? (comment éviter ce calcul sur l'ensemble des mots de l'index ?).

## Recherche de plusieurs mots

Il suffit de croiser des recherches simples de mot, en calculant leur intersection, afin de retrouver les documents indexés qui contiennent chacun de ces mots. On peut définir un vecteur comme étant un résultat de recherche sous forme d'une suite de 0 et de 1 de longueur égale au nombre de document indexés : lorsque le produit de deux vecteurs n'est pas nul, cela signifie qu'il contient l'ensemble des documents contenant l'ensemble des mots recherchés ; on peut envisager de créer à la volée les vecteurs lors d'une recherche (il n'est pas nécessaire de créer et stocker les vecteurs à l'avance) ; on peut envisager aussi la même recherche au niveau des phrases cette fois (les vecteurs seront alors de très grande taille).

## Recherche d'une expression exacte

Dans ce cas, il faut ajouter une information lors de l'index : la position du mot (numéro du mot dans le document, ou bien n° du mot dans la phrase, mais cela compliquera les calculs). On peut envisager de calculer une sorte de distance entre les résultats, basée sur la position des mots, phrases, paragraphes : on pourrait ainsi détecter les mots proches, donc faire des recherches capable de tenir compte des expressions ainsi que des opérateurs évolués (par exemple tel que NEAR : mot "près de").

## Requêtes Linq

Les requêtes Linq semblent tout à fait adaptées à leur exploitation dans VBTextFinder, par exemple la construction de l'index fréquentiel ou alphabétique ne requiert qu'une seule ligne de code !

' Pour compiler ce code sous VB9/2008, ajouter la référence System.Core 3.5,

' puis cocher System.Linq (et Option Infer : On)

Dim aMots(m_htMots.Count - 1) As clsMot

m_htMots.Values.CopyTo(aMots, 0)

Dim indexFreq = From mot In aMots _

Order By mot.iNbOccurences Descending, mot.sMot _

Select mot.sMot, mot.iNbOccurences

Dim indexAlphab = From mot In aMots _

Order By mot.sMot _

Select mot.sMot, mot.iNbOccurences

Pour construire ces index sans les mots du dictionnaire, cela se complique : il y a bien une instruction Except, mais elle ne fonctionne que par valeur :

Dim indexDico = index.Except(dico)

Pas de problème pour afficher les index des mots hors dictionnaire, mais dès que l'on veut afficher le nombre d'occurrences correspondantes, je n'ai pas réussi à obtenir un code qui fonctionne dans tous les cas : ou bien ce sont les occurrences qui posent problème, ou bien ce sont les accents, ou bien les performances sont rédhibitoires... la suite au prochain épisode !

Dès que j'aurai trouvé la solution, j'envisage également de programmer des recherches de plusieurs mots, ainsi que des recherches d'expression, car toutes les fonctions membres des chaînes de caractères (String) sont permises dans les requêtes Linq.

Voici 101 exemples de programmation Linq :

http://msdn.microsoft.com/en-us/vcsharp/aa336746.aspx

# Installation : les pré-requis

- Version VBA Excel : VBTextFinder.xls : pas de pré-requis hormis Excel à partir de la version 97 ;

- Version VBA Word : VBTextFinder.doc : pas de pré-requis hormis Word à partir de la version 97 ;

- Version en VB6 : Le logiciel runtime (gratuit) de Visual Basic 6 (VB6) doit être installé : C:\WINDOWS\system32\msvbvm60.dll (pour cela, installez n'importe quel logiciel packagé capable d'installer le runtime VB6, par exemple : http://patrice.dargenton.free.fr/gravity/gravityinst.zip : 1.6 Mo).

- Version DotNet : Si la plateforme .Net n'est pas déjà installée sur votre machine (vous recevrez l'erreur 0xc0000135), vous pouvez l'installer en la téléchargeant via Windows Update, ou bien ici :

Microsoft .NET Framework 2.0 Service Pack 1 (x86)

www.microsoft.com/downloadS/details.aspx?displaylang=fr&FamilyID=79bc3b77-e02c-4ad3-aacf-a7633f706ba5 (24 Mo)

Voir ici pour plus de détail.

# Historique des versions

## Version 1.03 du 18/05/2008

- Corrections mineures (info-bulle du bouton "Ajouter le(s) document(s)", documentation, ...).

## Version 1.02 du 10/05/2008

- Gestion d'un dictionnaire.

## Version 1.01 du 21/04/2008

## Version 1.00 du 17/04/2006

## Version 0.01 du 10/04/200 4 : Première version

# Liens

## Logiciels équivalents

- Full Text Search Tool (n'affiche pas les occurrences trouvées)

www.codeproject.com/KB/cs/Text_Search.aspx

- Full-Text Search: Fast, Damn Fast and DotLucene By Dan Letecky

Search 3.5 GB of text in 0.1 second! (pour site web internet ou intranet)

www.codeproject.com/useritems/damnfastsearch.asp

- Seekafile Server 1.0 - Flexible open-source search server By Dan Letecky

Windows Service that indexes DOC, PDF, XLS, PPT, RTF, HTML, TXT, XML, and other file formats

Desktop and ASP.NET search samples included

(il faut installer le serveur, construire l'index, puis installer le client : pas complètement trivial à tester)

www.codeproject.com/KB/IP/seekafile.aspx

- Populating a Search Engine with a C# Spider

How-to build an ASP.NET search engine link-spider using C# (Pour site web)

www.codeproject.com/article.asp?tag=11786751643738175

- Word Search Engine (ne semble pas fonctionner en français)

www.codeproject.com/KB/string/wse1.aspx

- Permet de retrouver des fichiers Word contenant un groupe de mots (pas super fiable)

www.vbfrance.com/code.aspx?ID=39560

## Indexation d'autres types de document

- Indexation des documents pdf (code source en C++ MFC)

Code to extract plain text from a PDF file : source code that shows how to decompress and extract text from PDF documents

www.codeproject.com/KB/cpp/ExtractPDFText.aspx

- Using the IFilter interface to extract text from various document types (dont pdf)

www.codeproject.com/KB/cs/IFilter.aspx

- Using DocxToText to Extract Text from DOCX Files (Word 2007)

www.codeproject.com/office/ExtractTextFromDOCXs.asp

Pour utiliser ces logiciels, il faudra soit incorporer le code source, soit gérer les arguments en ligne de commande, sinon la procédure d'indexation ne sera pas automatique :

- VB2Html : Créer un rapport Html d'un projet Visual Basic 6, 7, 8 et 9 : Pour indexer le code source (VB2Txt)

- Dbx2Txt : Convertir un fichier Dbx (Outlook Express) en Txt : Limitation : Le contenu texte des courriels html n'est pas extrait

- XL2Csv : Convertir un fichier Excel en fichiers Csv (ou en 1 fichier txt) : Limitation : le type de donnée doit être unique par colonne Excel

- DBComp : le comparateur de structure de base de données Access

## Algorithmes

- Dictionnaire optimisé

www.csharpfr.com/code.aspx?ID=46038

- Dictionnaires, anagrammes : algos efficaces

www.vbfrance.com/code.aspx?ID=30125

- Stormpedia : Analyser le sens des mots via une analyse de leurs fréquences

www.csharpfr.com/code.aspx?ID=44950

- WordCloud - A Squarified Treemap of Word Frequency

www.codeproject.com/csharp/wordcloud.asp

- A generic frequency table in C#

www.codeproject.com/useritems/FrequencyTable.asp

- Correction orthographique : Super Fast Spell Checking in C#

Use a Binary Search Tree to perform super fast spell checking. Support for custom dictionaries

www.codeproject.com/useritems/SuperFastSpellCheck.asp

- A simple soundex implementation in C# and VB.NET to recognize phonetically similar words based on basic soundex algorithms

www.codeproject.com/useritems/Soundex.asp

- Implement Phonetic ("Sounds-like") Name Searches with Double Metaphone Part V: .NET Implementation

www.codeproject.com/cs/algorithms/dmetaphone5.asp

- Algorithme Soundex

www.csharpfr.com/code.aspx?ID=39423

## Divers

- VBDico : Faire un glossaire des mots hors dictionnaire en parcourant un document Word (assez lent)

www.vbfrance.com/code.aspx?ID=20449

- GoogleFight : Mon correcteur orthographique favori !

Comparer la fréquence de deux orthographes d'un mot sur Google

www.vbfrance.com/code.aspx?ID=20641

- Corpus de texte

www.revue-texto.net/Liens/Liens_index.html#corp

- Extraire les informations d'un fichier Word sans l'ouvrir en VBA

www.vbfrance.com/code.aspx?ID=45781

- Microsoft Indexing Service and OLE DB By Ali Hamdar

How we can access Windows Indexing Service using OLE DB

www.codeproject.com/KB/database/indexingservice.aspx

## Dictionnaires

- Liste des mots conjugués et dérivés du dictionnaire

(4 doublons rencontrés : Esquimaude, Esquimaudes, Internet et Napoléon)

www.pallier.org/ressources/dicofr/liste.de.mots.francais.frgut.txt

Autre liste : http://brunews.free.fr/Dico.zip

- Autres logiciels de Brunews : http://brunews.com/brunews/index.html

VERBEUR 74 Ko: Conjugaison complète de 6287 verbes français, un genre Bescherelle (les verbes sont intégrés dans le logiciel).

http://brunews.com/brunews/download/Verbeur.zip

CHERCHER 5 Ko: Recherche les fichiers contenant le texte indiqué, dans DLL et EXE sur demande, ultra rapide.

http://brunews.com/brunews/download/FindInFile.zip

LESMOTS 768 Ko: Aide pour mots croisés ou Scrabble, sa base modifiable comporte déjà 290027 mots.

http://brunews.com/brunews/download/LesMots.rar

- Le dictionnaire en ligne ultime

www.tv5.fr/TV5Site/alexandria/definition.php

- Proverbes, sentences et maximes

www.vbfrance.com/code.aspx?ID=31830

- Jouer au Literati, TextExpress, le mot le plus long, etc!

(contient une liste des mots du dico sans accent, accès à un dico en ligne)

www.vbfrance.com/code.aspx?ID=36617

## Autres logiciels

- Instantor et sanzereur : nombreux outils d'analyse et de traitement de la langue

www.areopage.net/instantor.html

www.areopage.net/sanzereur.html

www.areopage.net/progs.html