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)
=# |