Chercher dans un dictionnaire
[Durée : 25 minutes]
Un très grand nombre d'outil sous linux permet de filtrer et combiner des traitements sur des données.
Vous trouverez une grande liste de mots du dictionnaire anglais dans "/usr/share/dict/words"
Que ce soit pour gagner au scrabble, pour trouver des noms de projets, ou pour vérifier des données, cette liste peut être utile...
Vérifiez si ce fichier existe, si cela fonctionne, ls doit ré-afficher le nom du fichier :
ls /usr/share/dict/words
Si le fichier est ré-affiché, vous pouvez passer à la suite, à la première question...
Si cela ne fonctionne pas, et que vous utilisez ubuntu, vous pouvez l'installer :
sudo apt install wamerican
Si vous n'utilisez pas ubuntu, essayez de trouver un moyen de l'installer par les packages d'installations de logiciels de votre distribution. En dernier recours
Question
Nous allons souvent utiliser le fichier dictionnaire "/usr/share/dict/words" dans la suite de l'exercice. Pour éviter d'avoir à taper à chaque fois ce chemin du fichier, créez une variable $DIC qui a pour contenu le nom de ce fichier dictionnaire.
Vérifiez que cela a fonctionné en affichant le contenu de cette variable.
Indice
Recherchez sur internet, par exemple : use variables bash
Solution
DIC=/usr/share/dict/words
echo $DIC
Cela doit afficher :
/usr/share/dict/words
Avec bash, le $ est nécessaire pour la lecture de la variable, mais pas lors de la création ou de l'affectation. Les variables sont "case sensitive" : vous pouvez soit utiliser les majuscules, soit les minuscules, mais vous devez toujours utiliser la même chose au moment de lire la variable que lorsque vous la créez ou modifiez.
Question
Affichez tous les mots contenant les lettres "api" dans le dictionnaire anglais/américain
Indice
Cherchez sur internet : rechercher dans un fichier linux
Solution
grep -i api $DIC
Le -i permet de rechercher sans distinction de majuscules / minuscules, ce qui donne quelques réponses supplémentaires (sans être indispensable pour cet exercice)
Question
Si ce n'est pas déjà fait : faites la même recherche, mais affichez le résultat en utilisant la commande "less", qui permet d'afficher plus efficacement des contenus longs. Vous devez donc trouver le moyen de combiner la commande précédente avec le programme less : envoyez la sortie de la commande précédente en entrée pour le programme less...
Une fois la réponse affichée dans less, apprenez à :
Naviguer plus bas ou plus haut dans le contenu affiché
Rechercher le mot "api" dans less pour le mettre en surbrillance aussi sur cet écran
Quitter less
Indice
Pour apprendre à combiner les deux commandes, consultez le chapitre "pipelines" du guide "LinuxCommand.org".
Solution
grep -i api $DIC | less
Pour utiliser less :
Pour naviguer : flèche haut, flèche bas, page up, page down,
Rechercher un mot : taper "/" suivi du mot à rechercher et la touche Entrée
pour quitter : taper "q"
Question
Y'a t'il des mots en double (par exemple avec le suffix 's) ? Enlevez les des résultats.
Indice
Avec la bonne option, on peut aussi utiliser grep pour faire une recherche "inverse", c'est à dire que plutôt que d'afficher les lignes qui contiennent quelque chose, il est possible d'afficher uniquement les lignes qui ne contiennent pas...
Si vous avez des problèmes pour mettre un apostrophe sur la ligne de commande, par exemple pour taper : 's
, mettez cela entre guillemets : "'s"
Solution
grep -i api $DIC | grep -v "'s"
Question
Comptez le nombre de mots obtenus dans la réponse précédente (ou le nombre de ligne, puisque c'est la même chose dans notre cas)
Solution
grep -i api $DIC | grep -v "'s" | wc -l
(Lors de mes tests, 111 mots. Vous pouvez avoir un chiffre différent en fonction de la version du dictionnaire)
Question
[Question bonus si vous êtes en avance] Trouvez le package d'installation du dictionnaire français, installez le, et trouvez les mots français qui contiennent "api". Y a t'il plus de mots qui contiennent "api" en français ou en anglais ?
Indice
apt-cache est un outil qui permet d'explorer en ligne de commande la liste de tous les packets des distributions ubuntu ou debian.
Trouvez le bon argument pour rechercher un paquet.
Solution
apt-cache search french dictionary
C'est la commande la plus simple mais si vous ne saviez pas que vous pouviez mettre les 2 mots, vous avez peut être trouvé une autre réponse qui marche aussi :
apt-cache search dictionary | grep -i french
En résultat, vous avez une liste assez longue car on trouve beaucoup de dictionnaires pour correcteurs orthographiques, mais une seule entrée fait référence à /usr/share/dict, l'emplacement d'installation :
hunspell-fr - French dictionary for hunspell (dependency package)
hunspell-fr-classical - French dictionary for hunspell (classical version)
wfrench - French dictionary words for /usr/share/dict
aspell-fr - French dictionary for aspell
dict-freedict-bre-fra - Breton-French dictionary for the dict server/client
dict-freedict-deu-fra - German-French dictionary for the dict server/client
dict-freedict-eng-fra - English-French dictionary for the dict server/client
dict-freedict-fra-bre - French-Breton dictionary for the dict server/client
dict-freedict-fra-deu - French-German dictionary for the dict server/client
dict-freedict-fra-eng - French-English dictionary for the dict server/client
dict-freedict-fra-nld - French-Dutch dictionary for the dict server/client
dict-freedict-jpn-fra - Japanese-French dictionary for the dict server/client
dict-freedict-nld-fra - Dutch-French dictionary for the dict server/client
felix-latin - Félix Gaffiot's Latin-French dictionary - viewer
felix-latin-data - Félix Gaffiot's Latin-French dictionary - data
hunspell-fr-comprehensive - French dictionary for hunspell (comprehensive version)
hunspell-fr-modern - French dictionary for hunspell (modern version)
hunspell-fr-revised - French dictionary for hunspell (revised version)
ifrench - French dictionary for ispell (Hydro-Quebec version)
ifrench-gut - French dictionary for ispell (GUTenberg version)
jargoninformatique - French dictionary of computer vocabulary
le-dico-de-rene-cougnenc - the "Dico" by Rene Cougnenc
libwww-dict-leo-org-perl - interface module to dict.leo.org online dictionary
myspell-fr - French dictionary for myspell (Hydro-Quebec version)
myspell-fr-gut - French dictionary for myspell (GUTenberg version)
stardict-xmlittre - French Littré dictionary for stardict
tagainijisho-dic-fr - French dictionary files for Tagaini Jisho
Pour procéder à l'installation, il vous faut tout d'abord utiliser sudo pour que l'installation soit effectué en tant qu'administrateur avec le compte "root", et "apt install" pour l'installation elle même :
sudo apt install wfrench
Exemple de résultat :
[sudo] password for ics:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
wfrench
0 upgraded, 1 newly installed, 0 to remove and 49 not upgraded.
Need to get 274 kB of archives.
After this operation, 1 568 kB of additional disk space will be used.
Get:1 http://fr.archive.ubuntu.com/ubuntu cosmic/main amd64 wfrench all 1.2.3-11build1 [274 kB]
Fetched 274 kB in 0s (3 608 kB/s)
Preconfiguring packages ...
Selecting previously unselected package wfrench.
(Reading database ... 300990 files and directories currently installed.)
Preparing to unpack .../wfrench_1.2.3-11build1_all.deb ...
Unpacking wfrench (1.2.3-11build1) ...
Setting up wfrench (1.2.3-11build1) ...
Processing triggers for man-db (2.8.4-2) ...
Processing triggers for dictionaries-common (1.28.0) ...
Si vous cherchez sur internet "list files contained in an ubuntu package", vous trouverez par exemple la page "askubuntu : How do I get a list of installed files from a package?", avec la réponse "To see all the files the package installed onto your system, do this: dpkg-query -L <package_name>
", donc vous lancez la commande :
dpkg-query -L wfrench
Avec en résultat, beaucoup de répertoires, mais un premier fichier /usr/share/dict/french :
/.
/usr
/usr/share
/usr/share/dict
/usr/share/dict/french
/usr/share/doc
/usr/share/doc/wfrench
/usr/share/doc/wfrench/README.Debian
/usr/share/doc/wfrench/changelog.Debian.gz
/usr/share/doc/wfrench/copyright
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/french.5.gz
/var
/var/lib
/var/lib/dictionaries-common
/var/lib/dictionaries-common/wordlist
/var/lib/dictionaries-common/wordlist/wfrench
Vous pouvez vérifier le contenu de ce fichier avec less pour voir que c'est bien une liste de mots en français, et ensuite, relancer le même type de commandes pour trouver les mots, et les compter (411 mots pour moi) :
DIC=/usr/share/dict/french
grep api $DIC | less
grep api $DIC | wc -l