Utiliser Wolfram|Alpha (en ligne de commande)

Wolfram|Alpha ?

Si vous ne connaissez pas, allez faire un tour sur la page principale, www.wolframalpha.com/.

Merci à Romain Vernoux qui m’a fait découvrir cet outil en 2012 !

  • Wolfram|Alpha est © et ® Wolfram Research Company;

  • wolf (ruby cli) est © Gabriel Horner;

  • wolfram (ruby cli) est aussi © Gabril Horner.

  • ruby et nokogiri sont la propriétés de leurs auteurs respectifs.


wa.sh : un premier client pour Wolfram|Alpha, léger et en Bash ?

Avantages et inconvénients

L’avantage de ce premier client est sa portabilité : il est très léger (47 lignes de code, avec les commentaires!), et ne demande aucune dépendance, à part grep, curl, tr et sed, déjà installés sur n’importe quel Linux, et disponibles sur Mac OS X (avec brew) and on Windows (with cygwin)..

Néanmoins, ce client est plus minimaliste que wolf (présenté plus bas), et il ne présente aucune option.

Source

La version originale est ici wa.sh (original).

Ma version, sans couleur en sortie, est là wa_nocolor.sh. Une version « plus à jour » se trouve ici wa.sh.

Obtenir une clé d’application

Pour plus de détails, voir plus bas.

Il faut cette fois l’enregistrer dans un fichier ~/.wolfram_api_key sous la forme :

export API_KEY="3HHP2W-UUPQUT6997"

Par exemple avec la commande suivante :

mv ~/.wolfram_api_key /tmp/  # Pour ne pas écraser un fichier qui serait déjà là !
echo 'export API_KEY="3HHP2W-UUPQUT6997"' > ~/.wolfram_api_key
# Assurez vous que ce fichier ait les bonnes permissions de lecture !
chmod +r ~/.wolfram_api_key

Exemples

Voici quelques exemples, qui permettent de comparer les sorties des deux clients (voir plus bas pour des exemples avec wolf) :

  1. Un test stupide : 0+0 :

    $ wa_nocolor.sh "0+0"
    ## Input
    0 + 0
    ## Result
    0
    ## Number line
    ## Number name
    zero
    
  2. Un calcul de distance :

    $ wa_nocolor.sh "distance Paris Hyderabad"
    ## Input interpretation
    distance | from | Paris, Ile-de-France
    to | Hyderabad, Telangana, India
    ## Result
    7563 km (kilometers)
    ## Unit conversions
    4699 miles
    7563 km (kilometers)
    7.563×10^6 meters
    4084 nmi (nautical miles)
    ## Direct travel times
    aircraft (550 mph) | 8 hours 35 minutes
    sound | 6 hours 10 minutes
    light in fiber | 35 ms (milliseconds)
    light in vacuum | 25 ms (milliseconds)
    (assuming constant-speed great-circle path)
    ## Map
    ## Fraction of Earth circumference
    0.19 ≈ 1 / 5
    
  3. Résolution d’une équation :

    $ wa_nocolor.sh "x^3 - sinx = e^-x"
    ## Input
    x^3 - sin(x) = e^(-x)
    ## Plot
    ## Numerical solution
    x ≈ 1.06853181316479...
    
  4. Et un exemple plus drôle, un Pokémon :

    $ wa_nocolor.sh pikachu | sed 's/\\#/#/g'
    ## Input interpretation
    Pikachu
    ## Basic properties
    name | Pikachu
    Japanese name | ピカチュウ (Pikachu)
    Pokédex number | 25
    type | Electric
    Pokédex color | yellow
    generation | Generation I
    icon | 
    footprint | 
    ## Physical characteristics
    species | Mouse Pokémon
    height | 0.41 m
    weight | 5.99 kg
    proportion of females | 50%
    proportion of males | 50%
    evolves from | Pichu
    evolves into | Raichu
    natural abilities | Static
    Dream World abilities | Lightning Rod
    ## Base statistics
    hit points | 35
    attack | 55
    defense | 40
    special attack | 50
    special defense | 50
    speed | 90
    total stats | 320
    (statistics vary based on level, effort values and individual values)
    ## Image
    ## Popular curve
    ## Wikipedia summary
    Pikachu is a species of Pokémon, fictional creatures that appear in an assortment of media of the Pokémon franchise by The Pokémon Company. Pikachu is a yellow mouse-like Pokémon with powerful electrical abilities. In most vocalized appearances, including the anime and certain video games, it is primarily voiced by Ikue Ōtani. A Pikachu also appears as part of the main cast in the live-action animated film Pokémon Detective Pikachu, played in CGI and voiced by Ryan Reynolds.
    
  5. Allez, un dernier exemple, on demande le cours actuel de la roupie indienne :

    $ echo -e "Requête à Wolfram|Alpha en cours…"
    $ echo -e "Le $(date), 1 € valait $(wa_nocolor.sh "1 EUR in INR" | grep -o "₹.*$")."
    Requête à Wolfram|Alpha en cours…
    Le mer. 25 août 2021 12:53:50 CEST, 1 € valait ₹87.06 (Indian rupees) (24/08/2021)
    ₹85.48 (26/03/2021 | 5 months ago)
    ₹90.60 (21/04/2021 | 4 months ago)
    ₹88.06 (annualized volatility: 5.7%).
    

Attention

On pourrait se plaindre de l”incroyable lenteur de cette solution. Plusieurs secondes d’attente pour 4 requêtes, c’est pas mal !


wolf : un second client pour Wolfram|Alpha, en ruby ?

La page principale est github.com/cldwalker/wolf.

Il s’agit aussi d’un client en ligne de commande pour l’outil Wolfram|Alpha.

ruby1.9.1

Pour l’installer sur Ubuntu 11.10 (et plus récent), il est nécessaire d’installer les paquets ruby1.9.1 et ruby1.9.1-dev :

sudo apt-get install ruby1.9.1 ruby1.9.1-dev

Avertissement

Ruby 1.9.1 n’est plus disponible dès Ubuntu 15.10 !

Je ne peux donc plus tester les exemples d’utilisation de wolf inclus ci-dessous, désolé.

nokogiri

Ensuite, il faut installer Nokogiri.

D’abord, ses dépendances (quelques paquets ruby), et deux librairies :

sudo apt-get install ri1.9.1 rdoc1.9.1 irb1.9.1
sudo apt-get install libreadline-ruby1.9.1 libruby1.9.1 libopenssl-ruby1.9.1
# nokogiri requirements
sudo apt-get install libxslt-dev libxml2-dev

Attention, la dernière étape change du tutoriel officiel sur la page de l’auteur. Attention aussi, car cette installation est très longue, la gem ayant besoin d’une étape de compilation, apparemment très longue (plusieurs minutes à 100% de temps CPU).

# Attention : là ça change du tutoriel officiel
sudo gem1.9.1 install nokogiri

wolf

Et enfin, il faut installer la gem wolf :

sudo gem1.9.1 install wolf

Obtenir une clé d’application (bis)

Comme l’explique la page de wolf sur Github, il faut créer un compte, puis obtenir une clé en cliquant sur le bouton « Get an AppID ».

Pour l’info, c’est une petite chaîne de caractère qui ressemble à ça :

3HHP2W-UUPQUT6997

Avertissement

Ceci n’est pas une clé valide ! Utilisez la votre !

Enregistrer la clé

Le plus simple est de créer un fichier ~/.wolfrc contenant ça "Wolfram.appid=3HHP2W-UUPQUT6997" :

mv ~/.wolfrc /tmp/  # Pour ne pas écraser un fichier qui serait déjà là !
echo "Wolfram.appid=3HHP2W-UUPQUT6997" > ~/.wolfrc
# Assurez vous que ce fichier ait les bonnes permissions de lecture !
chmod +r ~/.wolfrc

Tester le tout

Un simple test wolf 0+0 permet d’être sûr de la réussite ou de l’échec de l’installation.

Normalement, les messages d’erreurs renvoyés par Ruby sont à peu près compréhensibles, donc si le premier test vous engueule, il devrait aussi donner les infos nécessaires pour corriger l’installation.

Avertissement

Le problème le plus fréquent est une confusion entre ruby1.8 et ruby1.9.1 !


Exemples : directement embarqués dans cette page web ?

Avec l’extension runblock, il est possible d’embarquer le résultat d’un appel à wolf directement dans la page !

$ wolf 0+0
## Input
0 + 0
## Result
0
## Number line
## Number name
zero

Un premier exemple

$ wolf "distance Paris Hyderabad"
## Input interpretation
distance | from | Paris, Ile-de-France
to | Hyderabad, Telangana, India
## Result
7563 km (kilometers)
## Unit conversions
4699 miles
7563 km (kilometers)
7.563×10^6 meters
4084 nmi (nautical miles)
## Direct travel times
aircraft (550 mph) | 8 hours 35 minutes
sound | 6 hours 10 minutes
light in fiber | 35 ms (milliseconds)
light in vacuum | 25 ms (milliseconds)
(assuming constant-speed great-circle path)
## Map
## Fraction of Earth circumference
0.19 ≈ 1 / 5

D’autres essais ?

Résoudre une équation

$ wolf "x^3 - sinx = e^-x"
## Input
x^3 - sin(x) = e^(-x)
## Plot
## Numerical solution
x ≈ 1.06853181316479...

Base de données de Pokémon

Un ajout drôle qui a fait pas mal parler de lui !

$ wolf pikachu | sed s/"\\\'"/""/ | sed s/"\\\%"/"%"/
## Input interpretation
Pikachu
## Basic properties
name | Pikachu
Japanese name | ピカチュウ (Pikachu)
Pokédex number | 25
type | Electric
Pokédex color | yellow
generation | Generation I
icon | 
footprint | 
## Physical characteristics
species | Mouse Pokémon
height | 0.41 m
weight | 5.99 kg
proportion of females | 50%
proportion of males | 50%
evolves from | Pichu
evolves into | Raichu
natural abilities | Static
Dream World abilities | Lightning Rod
## Base statistics
hit points | 35
attack | 55
defense | 40
special attack | 50
special defense | 50
speed | 90
total stats | 320
(statistics vary based on level, effort values and individual values)
## Image
## Popular curve
## Wikipedia summary
Pikachu is a species of Pokémon, fictional creatures that appear in an assortment of media of the Pokémon franchise by The Pokémon Company. Pikachu is a yellow mouse-like Pokémon with powerful electrical abilities. In most vocalized appearances, including the anime and certain video games, it is primarily voiced by Ikue Ōtani. A Pikachu also appears as part of the main cast in the live-action animated film Pokémon Detective Pikachu, played in CGI and voiced by Ryan Reynolds.

D’autres exemples

Par exemple wolfram.example montre la sortie de la requette « distance Paris Montreal ».

Pour plus d’inspiration, il suffit d’aller piocher là bas.


À propos de cette page

Pour embarquer la commande et la sortie de wolf, j’utilise le morceau de code suivant :

.. runblock:: console

   $ wolf "ma question"

Une extension ?

On pourrait envisager de faire une extension Sphinx qui, comme greffon GNUplot, permettrait d’embarquer des graphiques et des tableaux produits par Wolfram|Alpha. J’ai la flemme de le faire moi-même !