J'utilise régulièrement un thésaurus, à la fois lors de la rédaction de textes pour la documentation et les README, et lors de l'écriture de code pour nommer des variables et des fonctions.
J'avais l'habitude d'utiliser des thésaurus en ligne, en particulier thesaurus.com, mais je détestais cette expérience. Bien que les résultats soient utiles et très bien organisés, ils ne sont pas faciles à utiliser au clavier et leur navigation est lente, surtout lorsque les résultats s'étendent sur plusieurs pages.
J'ai donc créé mon propre thésaurus. Je l'utilise beaucoup plus souvent que jamais sur thesaurus.com. Il possède moins de fonctionnalités, mais il est beaucoup plus rapide d’accès et perturbe moins le processus de création.
Dans une fenêtre de terminal, tapez th
suivi d'un mot. Par exemple, pour rechercher le mot attention :
Invoquer pour attirer th attention |
Le résultat est une liste de mots et d'expressions associés, organisés en colonnes, avec des lignes de contexte au-dessus et en dessous, et une liste d'options de navigation en bas.
Résultat de recherche pour attention |
La ligne inférieure de l'affichage des résultats affiche la liste des actions disponibles. Lancez une action en tapant la première lettre de l'action (mise en surbrillance à l'écran pour l'accentuer).
Les données sont organisées sous forme d'entrées de thésaurus, chacune contenant une collection de mots et d'expressions associés. Une entrée est un tronc et les mots et expressions associés sont les branches .
La vue par défaut est en mode branches. Les mots affichés sont les mots et expressions répertoriés après l’entrée dans le thésaurus source. Le passage en mode lignes réseau affichera les entrées contenant le mot. Ceci est clairement démontré par un exemple sans aucune branche :
le déclencheur est un mot sans entrée |
Il n'existe aucune entrée de thésaurus pour le mot déclencheur . Le mot déclencheur figure cependant dans le thésaurus, comme branches d'autres entrées. Passez en mode lignes réseau pour voir les entrées qui incluent le déclencheur :
Liste de mots pour lesquels le déclencheur est un mot apparenté |
Ce programme n'est pas disponible sous forme de package ; le code source doit être téléchargé et le projet construit. Les étapes suivantes produiront un thésaurus fonctionnel :
git clone https://www.github.com/cjungmann/th.git
cd th
make
make thesaurus.db
Jouez avec le programme pour voir si vous l'aimez. Si vous souhaitez l'installer pour qu'il soit disponible en dehors du répertoire de construction, appelez la commande suivante :
sudo make install
Il est facile de supprimer le programme si vous décidez que vous n’avez pas besoin du programme.
Si vous avez installé le programme, désinstallez-le d'abord avec sudo make uninstall
Cela supprimera le programme, les fichiers de support et le répertoire dans lequel les fichiers de support ont été installés.
Si le programme n'est pas installé, vous pouvez simplement supprimer le répertoire cloné en toute sécurité.
Le matériel suivant intéressera principalement les développeurs, le cas échéant.
Le projet est facile à construire, mais dépend d'autres logiciels. Ce qui suit est une liste de dépendances, dont seule la première (la base de données de Berkeley) peut nécessiter une intervention. Les éléments 3 et 4 ci-dessous sont téléchargés dans un sous-répertoire du répertoire de construction, et le code qui s'y trouve est lié statiquement à l'exécutable, ils n'affecteront donc pas votre environnement.
db version 5 (Berkeley Database) est nécessaire pour les bases de données B-Tree du projet. Si vous utilisez git , vous devriez déjà l'avoir, même sur FreeBSD qui, par ailleurs, n'inclut qu'une ancienne version de db . Make se terminera immédiatement par un message s'il ne trouve pas de db approprié, auquel cas c'est à vous d'utiliser votre gestionnaire de paquets pour installer db ou le construire à partir des sources.
git est utilisé pour télécharger certaines dépendances. Bien que les dépendances du projet puissent être directement téléchargées sans git , cela nécessite une connaissance non documentée des fichiers sources, un problème qui est évité lorsque make peut utiliser git pour télécharger les dépendances.
readargs est l'un de mes projets qui traite les arguments de ligne de commande. Bien que ce projet soit toujours utilisé par th , il n'est plus nécessaire d'installer cette bibliothèque pour que th fonctionne. Le ème Makefile télécharge maintenant le projet readargs dans un sous-répertoire, le construit et utilise la bibliothèque statique à la place.
c_patterns est un autre de mes projets, une expérience de gestion de code réutilisable sans avoir besoin de bibliothèque. Le Makefile utilise git pour télécharger le projet, puis crée des liens vers certains modules c_patterns dans le répertoire src à inclure dans la ème version.
Ce projet, bien qu'utile (du moins pour moi), est aussi une expérience. L'un de mes objectifs ici est d'améliorer mes compétences en rédaction de makefile. Certaines des décisions de construction et d'installation que j'ai prises ne correspondent peut-être pas aux meilleures pratiques, ou peuvent même être mal vues par les développeurs plus expérimentés. Si vous vous inquiétez de ce qui arrivera à votre système si vous installez th
, j'espère que ce qui suit éclairera votre décision.
Comme prévu, make compilera la ème application. De manière non conventionnelle, make effectue d'autres tâches qui peuvent prendre un certain temps :
Télécharge mon référentiel de modules C et utilise plusieurs d'entre eux en créant des liens vers le répertoire src .
Au lieu d'utiliser configure
pour vérifier les dépendances, le makefile identifie et se termine immédiatement par un message utile s'il détecte des dépendances manquantes.
Téléchargez et importez le thésaurus Moby du domaine public à partir du projet Gutenberg. Cela remplit la base de données de mots de l'application.
Abandonné Téléchargez et importez une base de données de comptage de mots. L’idée est de proposer des ordres de tri alternatifs pour faciliter la recherche d’un mot dans une liste plus longue. Cela ne fonctionne pas pour le moment. Je ne suis pas sûr d'y revenir car je trouve que l'avantage de lire une liste alphabétique l'emporte de loin sur l'avantage douteux d'essayer de mettre en premier les mots les plus couramment utilisés. La raison en est qu'il est beaucoup plus facile de suivre les mots pris en considération lorsqu'ils ne sont pas dispersés au hasard dans une longue liste de mots.
Je viens de remarquer qu'il existe une ressource de liste Moby Part of Speech qui pourrait aider à organiser la sortie. C'est intrigant, mais je ne suis pas sûr que cela soit utile, compte tenu de l'utilité du tri alphabétique dans l'utilisation de la sortie. Nous verrons.
J'avais plusieurs objectifs lorsque j'ai démarré ce projet.
Je voulais plus d'expérience avec la base de données Berkeley . Cette base de données de stockage de clés sous-tend de nombreuses autres applications, notamment git et sqlite .
Je voulais m'entraîner à utiliser certains de mes modules de projet c_patterns. L'utilisation de ces modules dans un projet réel m'aide à comprendre leurs défauts de conception et leurs fonctionnalités manquantes. j'utilise
columnize.c pour générer la sortie en colonnes,
prompter.c pour le menu d'options minimal en bas de la sortie,
get_keypress.c pour les touches sans écho, principalement utilisées par prompter.c .
Je voulais m'entraîner à concevoir un processus de construction qui fonctionne à la fois sous Gnu Linux et BSD. Cela inclut l'identification des modules manquants (en particulier db , dont BSD inclut une bibliothèque trop ancienne) et un traitement conditionnel repensé.
Je ne cible pas Windows car cela varie plus considérablement de Linux que de BSD, et je ne m'attends pas à ce que de nombreux utilisateurs de Windows soient à l'aise de passer à une application en ligne de commande.
La base de données Berkeley ( bdb ) semble être un produit de base de données intéressant. Son approche de bibliothèque C de bas niveau semble similaire au moteur FairCom DB que j'ai utilisé à la fin des années 1990.
La base de données Berkeley est attrayante car elle fait partie des distributions Linux et BSD et a un faible encombrement. Cela récompense une planification détaillée des données et c'est une excuse pour explorer certaines de mes idées en langage C.
Ce projet est un redémarrage de mon projet Words, qui est censé être un thésaurus et un dictionnaire en ligne de commande. Ce projet était ma première utilisation de bdb , donc certains de mes travaux sont un peu maladroits. Je veux repenser le code bdb à partir de zéro. Je vais copier une partie du code d'analyse de texte du projet de mots qui sera applicable ici.
En utilisant les grands ensembles de données que sont le thésaurus et le dictionnaire, je souhaite également tester les différences de performances entre les méthodes d'accès aux données Queue et Recno. Je m'attends à ce que la file d'attente soit plus rapide et que le début et la fin des enregistrements de longueur fixe puissent être calculés. L'accès par numéro d'enregistrement d'un enregistrement de longueur variable donné nécessiterait une recherche de l'emplacement du fichier. J'aimerais mesurer la différence de performances pour comparer cet avantage à l'efficacité du stockage des enregistrements de longueur variable.
Il existe deux sources de thésaurus du domaine public :
J'utilise le thésaurus Moby car son organisation est beaucoup plus simple et donc plus facile à analyser. Le problème est que les synonymes sont nombreux et, faute d’organisation, beaucoup plus difficiles à parcourir lors de la recherche d’un synonyme approprié.
Avec des centaines de synonymes pour de nombreux mots, il est très difficile de parcourir la liste pour trouver un mot approprié. Je vais essayer d'imposer un peu d'ordre dans la liste pour la rendre plus facile à utiliser. Après avoir utilisé l'outil pendant un certain temps, j'ai conclu que l'ordre alphabétique est le meilleur. Il est beaucoup plus facile de revenir à un mot dans une liste alphabétique. J'ai supprimé l'option permettant de sélectionner d'autres ordres de mots.
La classification la plus simple à utiliser est la fréquence d’utilisation des mots. J'ai l'intention de lister les mots de la plus grande fréquence d'utilisation à la moins fréquente. Vraisemblablement, les mots les plus populaires pourraient être les meilleurs choix, tandis que les mots moins populaires pourraient être obsolètes.
Il existe plusieurs sources de fréquences de mots. Celui que j'utilise est basé sur les ngrams de Google :
Données de corpus en langage naturel : de belles données
Je n'ai pas vraiment étudié la source Norvig, il est donc possible qu'elle contienne beaucoup d'absurdités. Il existe une autre source qui peut avoir une liste plus aseptisée, hackerb9/gwordlist. Si Norvig pose problème, je souhaite me souvenir de cette liste alternative par laquelle je peux la remplacer.
Cette partie n'est plus tentée. L'interprétation des données sources est compliquée par la nécessité de reconnaître et de convertir la notation unique du dictionnaire en caractères Unicode. J'ai résolu bon nombre de ces problèmes, mais il en reste encore beaucoup. Le Makefile comprend toujours des instructions pour télécharger ces informations et le référentiel conserve certains scripts de conversion au cas où je voudrais y revenir.
Le regroupement des synonymes par partie du discours (c'est-à-dire nom, verbe, adjectif, etc.) peut également être utile. Le premier problème consiste à identifier la partie du discours représentée par chaque mot. Le deuxième problème est celui de la présentation : il serait préférable, mais plus difficile à programmer, d'avoir une interface permettant à l'utilisateur de choisir la partie du discours avant d'afficher les mots.
Dictionnaires électroniques du domaine public
Ma première tentative consiste à utiliser le GNU Collaborative International Dictionary of English (GCIDE). Il est basé sur une ancienne version (1914) de Webster, avec quelques mots ajoutés par des éditeurs plus modernes.