ODS8 en fichier texte. Script Python

Cet article vient en complément de l’archive Un lexique genre ODS7 en txt… , en effet un utilisateur m’a fait part de sa recherche sur l’ODS 8 et ce “vieux billet” est un peu obsolète.

Voilà, mais pour des besoins pédagogiques (formation algorithme au cycle 4) j’avais besoin d’une liste de mots en .txt

Remarque : Je dis bien liste de mots (et non dictionnaire). Et les mots sont à tout le monde…

En effet j’envisage de faire travailler des élèves de 4ème, 3ème sur le développement d’algorithmes divers ayant pour base des jeux de lettres :

  • Boggle
  • Scabble
  • Pendu
  • etc…

Après quelques recherches sur la toile, je me suis aperçu que le fichier txt que je cherchais n’existait pas. Mais que quelques sites proposaient des listes (en html multi-pages. )

Ainsi le très bon listesdemots.net vous propose de nombreuses liste de mots. (898 pages)

Il était donc possible mais fastidieux de créer un fichier txt en copiant collant toutes ces listes !

Pas si fastidieux si on a Python sous le coude !

Code Python traduit en HTML:
#wouf 2020 (py3.6.4)
#http://site2wouf.fr
#Pour créer dico.txt
#Qui contient un lexique basé sur
#ODS8
#En scollant le site : listesdemots.net
#requis :l beautifulsoup4
#(cmd : pip install beautifulsoup4)
#requis :2 requests
#(cmd : pip install requests)
import requests
from bs4 import BeautifulSoup
fichier = open("dico.txt" , "w" )
 
#   Initialisation:
url="https://www.listesdemots.net/touslesmots" 
requete = requests.get(str(url+".htm" )) #page1
print(requete.url)
page = requete.content
 
soup = BeautifulSoup(page,features="html5lib" )
span = soup.find("span" , {"class" : "mot" })
mots=span.string.strip()
lesmots=mots.split(" " )
for l in lesmots:
    fichier.write(l+"\n" )
    print("|" ,end="" )
print()
print("page 1 : OK (" +str(len(lesmots))+")" )
totalmot=len(lesmots)
fichier.close()
#page 2 à 918:
for i in range(2,919):
    fichier = open("dico.txt" , "a" )
    lurl=url+"page" +str(i)+".htm" 
    ok=False
    while not ok:
        try:
            requete = requests.get(lurl,timeout=1)
            ok=True
        except:
            print("Problème de connexion. Je recommence !" )
    print(requete.url)
    page = requete.content
    soup = BeautifulSoup(page,features="html5lib" )
    span = soup.find("span" , {"class" : "mot" })
    mots=span.string.strip()
    lesmots=mots.split(" " )
    for l in lesmots:
        fichier.write(l+"\n" )
        print("|" ,end="" )
    totalmot+=len(lesmots)
    print()
    print("page " +str(i)+" : OK (" +str(len(lesmots))+"/" +str(totalmot)+")" )
    fichier.close()
#fin du script:
  
 
print("mots :" ,totalmot)

Ce script produit en quelques minutes un fichier txt (avec un mot par ligne) contenant tous les mots du site !

Sur le site de la fédération on peut lire :

Qui contacter pour distribuer/vendre un ouvrage ou autre produit utilisant la base de mots de l’Officiel du Scrabble® ?

Tout auteur souhaitant distribuer/vendre un ouvrage ou autre produit (hors application pour Smartphone), utilisant une base de mots conforme à l’Officiel du Scrabble®, doit remplir un contrat de partenariat qui lui sera envoyé sur demande faite auprès de la FISF, à l’adresse suivante : contact@fisf.net

Toute société souhaitant distribuer/vendre un produit numérique privé/grand public sécurisé du type application pour Smartphone, utilisant une base de mots conforme à l’ODS, doit contacter Jean-François Richez, responsable des licences numériques chez Larousse, à l’adresse suivante : JFRICHEZ@larousse.fr