IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

danielhagnoul

Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot.

Noter ce billet
par , 18/02/2021 à 21h51 (2359 Affichages)
Pour mémoire
  1. Version JS : https://www.developpez.net/forums/bl...etique-nombre/
  2. Version Python : https://www.developpez.net/forums/bl...etique-nombre/


Version Julia
  • Le 2021-02-18, j'utilise Julia_1.6.0-rc1 sur VS_Code_1.53.2. Ordinateur : W10 Pro, i9-10900F.
  • Préalables, mes billets précédents sur Julia sont supposés connus et assimilés.


Pour un débutant en Julia, ce n'est absolument pas évident, car il faut connaître :
  1. l'existence de counter() dans le paquet DataStructures,
  2. l'utilisation d'une regex avec findall()
  3. les subtilités du tri en UTF-8 (par défaut, Julia trie par ordre de point de code ce qui renvoie les mots commençant par une lettre accentuée à la fin de la liste).


Code Julia : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using DataStructures
 
const accentdict = Dict(
    'À'=> 'A', 'Á'=> 'A', 'Â'=> 'A', 'Ã'=> 'A', 'Ä'=> 'A',
    'Å'=> 'A', 'Ç'=> 'C', 'È'=> 'E', 'É'=> 'E',
    'Ê'=> 'E', 'Ë'=> 'E', 'Ì'=> 'I', 'Í'=> 'I', 'Î'=> 'I',
    'Ï'=> 'I', 'Ñ'=> 'N', 'Ò'=> 'O', 'Ó'=> 'O',
    'Ô'=> 'O', 'Õ'=> 'O', 'Ö'=> 'O', 'Ù'=> 'U', 'Ú'=> 'U',
    'Û'=> 'U', 'Ü'=> 'U', 'Ý'=> 'Y', 'à'=> 'a', 'á'=> 'a',
    'â'=> 'a', 'ã'=> 'a', 'ä'=> 'a', 'å'=> 'a', 'è'=> 'e',
    'é'=> 'e', 'ê'=> 'e', 'ë'=> 'e', 'ì'=> 'i', 'í'=> 'i',
    'î'=> 'i', 'ï'=> 'i', 'ð'=> 'd', 'ñ'=> 'n', 'ò'=> 'o',
    'ó'=> 'o', 'ô'=> 'o', 'õ'=> 'o', 'ö'=> 'o', 'ù'=> 'u', 
    'ú'=> 'u', 'û'=> 'u', 'ü'=> 'u', 'ý'=> 'y', 'ÿ'=> 'y')
 
function main()
    # pour le tri avec accent
    function tr(str, dict=accentdict)
        for (i, ch) in enumerate(str)
            if haskey(dict, ch)
                arr = split(str, "")
                arr[i] = string(dict[ch])
                str = join(arr)
            end
        end
        str
    end
 
    isless(x, y) = tr(x) < tr(y)
 
    # texte
    texte = """
        C'est l'évadé, du Névada.
        Qui s'évada dans, la vallée
        Dans la vallée, du Névada ?
        Qu'il dévala, pour s'évader
        Sur un vilain vélo volé !
        Qu'il a volé, dans une villa
        Et le valet, qui fut volé.
        Vit l'évadé, qui s'envola
    """
 
    texte_low = lowercase(texte)
 
    # trouve les mots corespondants au contenu du regex
    myregex = r"[a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]*" 
    words = map(range->texte_low[range], findall(myregex, texte_low))
    lst = sort([x for x in words if length(x) > 2], lt=isless)
 
    # génére un Dict dans l'ordre avec accent
    cnt = sort(Dict(counter(lst)), lt=isless)
 
    @show nb_de_mots = length(lst)
    cnt |> println
end
 
@time main()
@time main()
#=
    nb_de_mots = length(lst) = 29
    OrderedDict(
        "dans" => 3, 
        "dévala" => 1, 
        "envola" => 1, 
        "est" => 1, 
        "évada" => 1, 
        "évadé" => 2, 
        "évader" => 1, 
        "fut" => 1, 
        "névada" => 2, 
        "pour" => 1, 
        "qui" => 3, 
        "sur" => 1, 
        "une" => 1, 
        "valet" => 1, 
        "vallée" => 2, 
        "vélo" => 1, 
        "vilain" => 1, 
        "villa" => 1, 
        "vit" => 1, 
        "volé" => 3)
    0.328102 seconds (638.02 k allocations: 38.409 MiB, 2.23% gc time, 97.98% compilation time)
    0.004801 seconds (9.12 k allocations: 588.281 KiB)
=#


Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Viadeo Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Twitter Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Google Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Facebook Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Digg Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Delicious Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog MySpace Envoyer le billet « Julia. Compter le nombre de mots et, dans l'ordre alphabétique, le nombre de chaque mot. » dans le blog Yahoo

Commentaires