Bobet, topio, panosse, clédar… Pour découvrir la définition des mythiques mots vaudois ou romands, il existe deux sites: topio.ch, et henrysuter.ch. Malheureusement ces deux sites sont anciens et peu pratiques surtout sur mobile, et ne disposent pas d’outils de recherche dignes de ce nom. De plus certains termes sont dans un lexique et pas dans l’autre.
C’est pourquoi j’ai eu l’idée un jour de créer TopioSearch.
J’ai donc développé, grâce à un système d’API propulsé par Slim PHP Framework, un crawler qui, pour une requête, par exemple le terme suisse romand « gouille » ou « taborniau », va chercher celui-ci dans le contenu des pages de ces deux sites.
J’ai développé trois fonctions: « topio », « hsuter », « hsuternames » et qui vont aller chercher dans les contenus du lexique Topio.ch, et des deux lexiques Henrysuter.ch (celui des termes régionaux, et celui des noms de lieux). La requête AJAX va donc procéder aux trois requêtes l’une après l’autre avant d’afficher les résultats sur l’application frontend (réalisée avec Vue.js).
La problématique étant que les développeurs de ces lexiques ont géré les index arbitrairement. Alors que le lexique Topio.ch tient sur une page, celui d’Henrysuter.ch a une page par lettre, sauf pour les lettres avec peu de mots. Par exemple: un mot commençant par « A » est sur la page « A0.html » alors que le mot « Gouille » est sur la page « F0.html » car celle-ci contient les mots commençant par F et G. De même, la page « T0.html » contient les mots commençant par T, U, V, W, X, Y, Z.
Une première étape consiste donc à identifier sur quelle page est le mot, avec un gros « switch… case… » ou un tas de « if… else… ». Ensuite, on va charger le contenu de cette page, comme si un utilisateur allait dessus depuis son navigateur, puis avec des requêtes XPath, on parcourt le code source et on tente de trouver le titre contenant notre mot clé. Avec, à résoudre, les problématiques:
- des majuscules et des lettres accentuées dans le terme
- des multiples mots dans une entrée (variantes orthographiques)
Une fois qu’on pointe le bon terme avec XPath, on peut ensuite aller chercher les blocs HTML à la suite, qui contiennent la définition. À partir de là, on peut extraire les données, les sauvegarder en cache* et les renvoyer à notre contrôleur.
*J’ignore si j’ai le droit de faire ça, donc dans tous les cas, j’en appelle au Fair Use, c’est à dire à un usage éducatif, dans le cadre d’une formation. Et j’affiche toutes les données externes avec © topio.ch ou © henrysuter.ch dans mon application. Dans tous les cas, la chose serait faisable sans cache, en lisant uniquement les pages publiques des sites.
Et ainsi de suite pour les deux autres sites. Une fois que le contrôleur a pu récupérer (ou non) les données des 3 sites, il l’envoie à la vue, qui va afficher les résultats sur l’application. En l’occurence, le mot « taborniau » affiche 2 entrées: la définition selon le lexique de termes régionaux de H. Suter, et la définition selon le lexique de topio.ch (et rien du lexique des noms de lieux car ce n’est pas un nom de lieu). Le mot « gouille » en revanche affiche 3 entrées, car il existe aussi dans le lexique des noms de lieux.
L’avantage de TopioSearch, c’est que l’on peut chercher sur tous les lexiques en même temps. Et grâce à la mise des données en cache, on n’est pas obligé de « taper » sur les sites distants à chaque requête : la recherche est effectuée localement, puis de manière distante sur les sites si le terme n’existe pas dans le cache.
Limitations techniques de la version actuelle:
– Les définitions qui contiennent des liens ne s’affichent pas en entier
Essayez cet outil ! TopioSearch
