Les grands mots : programmes

Le mot le plus long en langue française est bien connu. C'est « anticonstitutionnellement ».

Nous allons répondre à ces questions hautement importantes.

Les mots les plus longs

longueur_mot.py

#!/usr/bin/python

with open("liste.de.mots.francais.frgut.txt", "r") as infile:
    for line in infile:
        mot = line.strip("\n")
        longueur = len(mot.decode('utf8'))
        print longueur, mot

mot_le_plus_long.sh

#!/bin/sh

./longueur_mot.py | sort -n

histogramme.gnuplot

set style data histograms
set style fill   solid 1.00 border lt -1
#set boxwidth 2 absolute
set boxwidth 2.6 relative
set terminal svg size 600,400 dynamic enhanced fname 'arial'  fsize 10 mousing name "histograms_2" butt solid 
set title "histogramme des tailles de mots"
set output 'histogramme.svg'
set xrange [1:25]
plot "histogramme.dat"

Les mots avec le plus d'une même lettre

decompose.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

LISTE = "liste.de.mots.francais.frgut.txt"
#LISTE = "petite.liste.txt"


def canonicalise(lettre):
    exceptions = {'A': 'a', u'à': 'a', u'â': 'a',
            u'ç': 'c',
            u'é': 'e', u'è': 'e', u'ê': 'e', u'ë': 'e',
            u'î': 'i', u'ï': 'i',
            u'ô': 'o',
            u'ù': 'u', u'û': 'u'}
    if lettre in exceptions:
        lettre = exceptions[lettre]
    return lettre


def decompose(mot):
    decompte = dict()
    for lettre in mot:
        lettre = canonicalise(lettre)
        try:
            decompte[lettre] += 1
        except KeyError:
            decompte[lettre] = 1

    # quelle lettre est la plus fréquente ?
    max = 0
    for lettre in decompte:
        if decompte[lettre] > max:
            max = decompte[lettre]
            lettre_max = lettre
    decompte['max'] = lettre_max

    return decompte


dictionnaire = dict()
with open(LISTE, "r") as infile:
    for line in infile:
        mot = line.strip("\n").decode('utf8')
        dictionnaire[mot] = decompose(mot)

lettres_max = dict()
for mot in dictionnaire:
    decomp = dictionnaire[mot]
    lettre_max = decomp['max']
    occurence = decomp[lettre_max]

    try:
        lettre = lettres_max[lettre_max]
    except KeyError:
        lettre = {'occurence': 0, 'mot': list()}

    if occurence > lettre['occurence']:
        lettres_max[lettre_max] = {'occurence': occurence, 'mot': [mot]}
    elif occurence == lettre['occurence']:
        lettres_max[lettre_max]['mot'].append(mot)

for lettre in sorted(lettres_max):
    res = lettres_max[lettre]
    print lettre, res['occurence'],
    for mot in res['mot']:
        print mot,
    print
    print

Les mots avec le plus de ...

#!/usr/bin/python
# -*- coding: utf-8 -*-

LISTE = "liste.de.mots.francais.frgut.txt"
#LISTE = "petite.liste.txt"


def canonicalise(lettre):
    exceptions = {'A': 'a', u'à': 'a', u'â': 'a',
            u'ç': 'c',
            u'é': 'e', u'è': 'e', u'ê': 'e', u'ë': 'e',
            u'î': 'i', u'ï': 'i',
            u'ô': 'o',
            u'ù': 'u', u'û': 'u'}
    if lettre in exceptions:
        lettre = exceptions[lettre]

    voyelles = "aeiouy"
    if lettre in voyelles:
        lettre = "voyelle"
    else:
        lettre = "consonne"

    return lettre


def decompose(mot):
    decompte = {"consonne": 0, "voyelle": 0}
    for lettre in mot:
        lettre = canonicalise(lettre)
        decompte[lettre] += 1

    return decompte


dictionnaire = dict()
with open(LISTE, "r") as infile:
    for line in infile:
        mot = line.strip("\n").decode('utf8')
        dictionnaire[mot] = decompose(mot)

max_voyelles = 0
max_taux_voyelles = 0.0
min_taux_voyelles = 1.0
max_consonnes = 0
for mot in sorted(dictionnaire):
    decomp = dictionnaire[mot]

    voyelles = decomp["voyelle"]
    consonnes = decomp["consonne"]

    if voyelles > max_voyelles:
        max_voyelles = voyelles
        max_voyelles_mot = mot

    if consonnes > max_consonnes:
        max_consonnes = consonnes
        max_consonnes_mot = mot

    taux_voyelles = (voyelles + 0.0) / len(mot)

    if taux_voyelles > max_taux_voyelles:
        max_taux_voyelles = taux_voyelles
        max_taux_voyelles_mot = mot

    if taux_voyelles < min_taux_voyelles:
        min_taux_voyelles = taux_voyelles
        min_taux_voyelles_mot = mot

    print taux_voyelles
    #print mot.encode("utf8"), voyelles, consonnes

print "voyelles", max_voyelles, max_voyelles_mot.encode("utf8")
print "consonnes", max_consonnes, max_consonnes_mot.encode("utf8")