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 :

1
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 :

1
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

1

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

1
DIC=/usr/share/dict/words
2
echo $DIC

Cela doit afficher :

1
/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

1
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

1
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

1
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

1
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

1
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 :

1
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 :

1
hunspell-fr - French dictionary for hunspell (dependency package)
2
hunspell-fr-classical - French dictionary for hunspell (classical version)
3
wfrench - French dictionary words for /usr/share/dict
4
aspell-fr - French dictionary for aspell
5
dict-freedict-bre-fra - Breton-French dictionary for the dict server/client
6
dict-freedict-deu-fra - German-French dictionary for the dict server/client
7
dict-freedict-eng-fra - English-French dictionary for the dict server/client
8
dict-freedict-fra-bre - French-Breton dictionary for the dict server/client
9
dict-freedict-fra-deu - French-German dictionary for the dict server/client
10
dict-freedict-fra-eng - French-English dictionary for the dict server/client
11
dict-freedict-fra-nld - French-Dutch dictionary for the dict server/client
12
dict-freedict-jpn-fra - Japanese-French dictionary for the dict server/client
13
dict-freedict-nld-fra - Dutch-French dictionary for the dict server/client
14
felix-latin - Félix Gaffiot's Latin-French dictionary - viewer
15
felix-latin-data - Félix Gaffiot's Latin-French dictionary - data
16
hunspell-fr-comprehensive - French dictionary for hunspell (comprehensive version)
17
hunspell-fr-modern - French dictionary for hunspell (modern version)
18
hunspell-fr-revised - French dictionary for hunspell (revised version)
19
ifrench - French dictionary for ispell (Hydro-Quebec version)
20
ifrench-gut - French dictionary for ispell (GUTenberg version)
21
jargoninformatique - French dictionary of computer vocabulary
22
le-dico-de-rene-cougnenc - the "Dico" by Rene Cougnenc
23
libwww-dict-leo-org-perl - interface module to dict.leo.org online dictionary
24
myspell-fr - French dictionary for myspell (Hydro-Quebec version)
25
myspell-fr-gut - French dictionary for myspell (GUTenberg version)
26
stardict-xmlittre - French Littré dictionary for stardict
27
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 :

1
sudo apt install wfrench

Exemple de résultat :

1
[sudo] password for ics: 
2
Reading package lists... Done
3
Building dependency tree       
4
Reading state information... Done
5
The following NEW packages will be installed:
6
  wfrench
7
0 upgraded, 1 newly installed, 0 to remove and 49 not upgraded.
8
Need to get 274 kB of archives.
9
After this operation, 1568 kB of additional disk space will be used.
10
Get:1 http://fr.archive.ubuntu.com/ubuntu cosmic/main amd64 wfrench all 1.2.3-11build1 [274 kB]
11
Fetched 274 kB in 0s (3 608 kB/s) 
12
Preconfiguring packages ...
13
Selecting previously unselected package wfrench.
14
(Reading database ... 300990 files and directories currently installed.)
15
Preparing to unpack .../wfrench_1.2.3-11build1_all.deb ...
16
Unpacking wfrench (1.2.3-11build1) ...
17
Setting up wfrench (1.2.3-11build1) ...
18
Processing triggers for man-db (2.8.4-2) ...
19
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 :

1
dpkg-query -L wfrench

Avec en résultat, beaucoup de répertoires, mais un premier fichier /usr/share/dict/french :

1
/.
2
/usr
3
/usr/share
4
/usr/share/dict
5
/usr/share/dict/french
6
/usr/share/doc
7
/usr/share/doc/wfrench
8
/usr/share/doc/wfrench/README.Debian
9
/usr/share/doc/wfrench/changelog.Debian.gz
10
/usr/share/doc/wfrench/copyright
11
/usr/share/man
12
/usr/share/man/man5
13
/usr/share/man/man5/french.5.gz
14
/var
15
/var/lib
16
/var/lib/dictionaries-common
17
/var/lib/dictionaries-common/wordlist
18
/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) :

1
DIC=/usr/share/dict/french
2
grep api $DIC | less
3
grep api $DIC | wc -l