Dfr: Un dictionnaire en ligne de commande 📖

Et hors ligne !

a marqué ce sujet comme résolu.

Bonjour,

Je viens vous présenter un simple dictionnaire en ligne de commande. Il y a même une démo à https://dico.ache.one1.

C’est un logiciel libre, le code source est disponible sur mon git personnel. Dfr se base sur le Wiktionnaire et permet d’y accéder simplement et sans connexion internet.

Dfr

C’est juste un dictionnaire.

Comment ça un dictionnaire ?

Ben … Vous tapez un mot, et ça vous donne la “ définition ”.

$ dfr dfr Pokémon
   Pokémon
   /pɔ.ke.mɔn/, nom
   	Créature imaginaire du jeu vidéo Pokémon (ainsi que du dessin animé dérivé) de formes très diverses, qui peut être attrapé et qui est utilisé pour des combats avec d’autres créatures.
   		* Le game designer avoue avoir passé des heures « et même des journées » à jouer aux *Pokémon* sur sa Game Boy lorsqu'il était enfant. Il ne ratait jamais un épisode télévisé, ni aucune rediffusion, avoue-t-il.

Aussi simple que ça.

Et il a quoi de particulier ton dictionnaire ?

Eh bien pas grand-chose … Ah si ! Il s’utilise hors-ligne. Le dictionnaire est stocké sur votre ordinateur et donc il n’y a pas besoin d’Internet pour avoir la définition d’un mot. C’est pratique mais du coup, ça vient avec un lot de défauts. Il est lourd (~430Mio) et la génération de la base initiale est longue et demande de la RAM (~2.5Gio). À part ça, il est plutôt sympa, très réactif et surtout très complet !

Aussi, c’est le seul dictionnaire français qui possède la prononciation des mots.

C’est pour aider les gens à parler français ? Pourquoi tu as besoin d’un dictionnaire ?

C’est toujours utile un dictionnaire. Il se trouve simplement que je suis nul en orthographe, j’aime bien vérifier l’orthographe d’un mot. Ensuite, je suis souvent amené à parler avec des gens qui apprennent le français et bien que je parle français, je n’aie pas toujours une définition très précise de chaque mot.

Pourquoi seulement français ?

Malheureusement, je ne suis pas très bon en langue. Je serais bien incapable de pouvoir contrôler si le logiciel fait bien ce qu’il doit faire dans une autre langue. À la limite en anglais. Pourquoi pas. À étudier ! Pour une prochaine version peut-être.

Bref, un dictionnaire c’est toujours utile, mais j’ai pas envie d’avoir un gros bouquin, ni d’avoir toujours une connexion internet alors j’ai créé un outil pour m’en passer. L’installation est décrite dans le README.md.

De plus, il pourrait être utile pour les linguistes et pour les appareils/applications hors-ligne comme les liseuses/lecteur de livres.

Voilà, c’est tout pour ce projet.
Je reviendrais vers vous lorsqu’il sera traduit pour d’autres langues par exemple.


  1. Elle peut être lente à charger pour le premier mot. Environ 15s quand même. C’est vraiment qu’une page de démo. Le problème vient de la mise en swap de la RAM peu utilisée.
+3 -0

C’est toujours utile un dictionnaire. Il se trouve simplement que je suis nul en orthographe, j’aime bien vérifier l’orthographe d’un mot.

Pour ce cas, tu comptes intégrer une auto-correction un peu à la façon des moteurs de recherche ? Si par exemple je tape :

% dfr voture
1) voiture
2) vautour
...

Dans la doc du projet, je vois qu’on peut aussi chercher avec un pattern, peut-être que c’est justement pour gérer le cas (entre autres) de l’orthographe inconnue ?

+1 -0

Ça serait intéressant comme optimisation effectivement. Je vais m’y pencher. Mais c’est vrai qu’avec plus d’un milion de mots c’est pas si simple !

Dans la doc du projet, je vois qu’on peut aussi chercher avec un pattern, peut-être que c’est justement pour gérer le cas (entre autres) de l’orthographe inconnue ?

Oui tout à fait, pour l’instant, ça fait le taf.

+2 -0

Super projet :D !

Merci ! :D

Une voie d’amélioration pourrait être l’amélioration de la vitesse d’installation initiale et la compression des données :)

Pour une auto-correction pas trop mauvaise et assez rapide pour 1 million de mots, tu peux utiliser la Distance de Levenshtein par exemple

Drulac

Je peux pas calculer la distance de Levenshtein avec chaque mot du dico. Du coup, j’ai fait autrement. Je calcule toutes les chaînes qui sont à une distance de 1 du mot tapé et ceux qui existent, je les propose. La quantité de mot traités augmente très très vite (exponentiellement) mais comme on ira jamais chercher à plus de 2, ça passe.

Ça prend quand même 1.5s pour les mots à une distance de 1 et 5s pour ceux à une distance de 2. 😭
Je dois optimiser tout ça.

Pour ce qui est de la compression des données, j’ai regardé, c’est possible de gagner un petit peu en utilisant gzip. De moitier presque. Par-contre, on perd du temps encore à l’installation.

Pour optimiser l’installation à part télécharger la bdd plutôt que de la créer. Je vois pas trop quoi faire. Pour l’instant, ce qui est fait, c’est le téléchargement du Wiktionnaire, la décompression des données puis l’extraction des informations dans une bdd.

+1 -0

De mémoire, bzip et gzip ne sont pas les plus appropriés :

All data can be optionally compressed:

   lz4 (super fast, low compression)
   zstd (wide range from high speed and low compression to high compression and lower speed)
   zlib (medium speed and compression)
   lzma (low speed, high compression)

C’est tiré de la doc de Borg : https://borgbackup.readthedocs.io/en/stable/

Je ne sais pas si c’est pertinent.


Autre chose, il y a moyen d’extraire uniquement la prononciation de manière efficace ? (sans extraire le reste ?) ou c’est impossible ?

Effectivement j’ai tenté avec lzma. Ça prend du temps à compresser mais c’est plus rapide que gzip pour décompresser et la compression est meilleur.

Je regarderais mais au final, on gagnerait 50% du poids total. Je pense qu’on peut d’abord optimiser les fonctionnalités.

+2 -0

@Lyph: Y a carrément moyen d’optimiser la taille, pas de 50% mais y a moyen sans dégrader les performance.

Autre chose, il y a moyen d’extraire uniquement la prononciation de manière efficace ? (sans extraire le reste ?) ou c’est impossible ?

Au niveau de l’extraction de la prononciation d’un mot. Ça n’a pas de sens à premier vu puisqu’un même mot peu avoir différentes prononciations. dfr crée une base de donnée sqlite qu’on peut efficassement requéter en fonction de la requête qu’on veut faire.Mais dfr n’intègre pas une fonction juste pour obtenir la prononciation d’un mot.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte