Wiktionnaire:Statistiques/code Unsui/Documentation
Apparence
Le tableau statistiques des langues est obtenu sous Unix à partir de scripts en Korn Shell. Ces scripts sont basiques afin de pouvoir être portés facilement sous d’autres Shell. Ils ont été testés sous les OS IBM/AIX et SUN/SOLARIS.
Procédure :
- 1) Récupérer le dump wiki [1], le décompresser et l’envoyer sous Unix (nom : Fic_wiki.txt). (actuellement 52362000 lignes.)
- 2) Récupérer la liste des codes langues triée par odre alphabétique des codes Wiktionnaire:Liste des langues et la placer dans Fic_liste_lang.txt.
- Personnellement je fais un copier-coller de la page telle qu’elle s’affiche à l’écran. Chaque entrée doit être de la forme : code : libellé
- 3) Extraire les balises langues du dump : ./extract-balise-langue qui crée les fichiers Fic_balise_lang_total.txt, Fic_balise_nom_total.txt, Fic_balise_flex_total.txt, Fic_balise_verbes.txt et Fic_balise_adj.txt.
- #! /usr/bin/ksh
- /usr/xpg4/bin/grep "{{=.*=}}" Fic_wiki.txt >Fic_balise_lang_total.temp # sélectionne les balises langues
- /usr/xpg4/bin/grep -iv comment Fic_balise_lang_total.temp > Fic_balise_lang_total.temp1 # supprime les commentaires qui contiennent des balises langues
- sed 's/ <text xml:space="preserve">//g' Fic_balise_lang_total.temp1 >Fic_balise_lang_total.save
- rm Fic_balise_lang_total.temp Fic_balise_lang_total.temp1
- #
- # Extraction des balises de deuxième niveau, type=nom
- #
- echo "comment\nbauche\n^:\nsectio\n;" >Fic_param_grep-v.txt
- echo "{{-nom-|.*}}\n{{-nom-ni-|.*}}\n{{-nom-nu-|.*}}\n{{-nom-nn-|.*}}\n{{-nom-npl-|.*}}" >Fic_param_grep_nom.txt
- /usr/xpg4/bin/grep -f Fic_param_grep_nom.txt Fic_wiki.txt >Fic_balise_nom.temp # sélectionne les balises {{-nom-}}
- /usr/xpg4/bin/grep -ivf Fic_param_grep-v.txt Fic_balise_nom.temp > Fic_balise_nom.temp1
- sed 's/nom-n.-|tsol/nom-|tsol/g' Fic_balise_nom.temp1|grep -v "nom-npl-|tsol" > Fic_balise_nom.save # traitement spécial tsolyani
- /usr/xpg4/bin/grep "nom-npl-|tsol" Fic_balise_nom.temp1 | sed 's/nom-npl-|tsol/flex-nom-|tsol/g' > Fic_balise_flex.save # traitement spécial tsolyani pour les flexions
- rm Fic_balise_nom.temp1 Fic_balise_nom.temp #ménage
- #
- # Extraction des balises de deuxième niveau, type=flexion
- #
- /usr/xpg4/bin/grep "{{-flex-.*|.*}}" Fic_wiki.txt >Fic_balise_flex.temp # sélectionne les balises {{-flex-}}
- /usr/xpg4/bin/grep -ivf Fic_param_grep-v.txt Fic_balise_flex.temp >> Fic_balise_flex.save
- rm Fic_balise_flex.temp
- #
- # Extraction des balises de deuxième niveau, type=verbe
- #
- echo "{{-verbe-|.*}}\n{{-verb-|.*}}" >Fic_param_grep_verbe.txt
- /usr/xpg4/bin/grep -f Fic_param_grep_verbe.txt Fic_wiki.txt >Fic_balise_verbe.temp # sélectionne les balises {{-verbe-}}
- /usr/xpg4/bin/grep -ivf Fic_param_grep-v.txt Fic_balise_verbe.temp > Fic_balise_verbe.save
- rm Fic_balise_verbe.temp #ménage
- #
- #
- # Extraction des balises de deuxième niveau, type=adjectif
- #
- echo "{{-adj-|.*}}\n{{-adjectif-|.*}}" > Fic_param_grep_adjectif.txt
- /usr/xpg4/bin/grep -f Fic_param_grep_adjectif.txt Fic_wiki.txt >Fic_balise_adj.temp # sélectionne les balises {{-adj-}}
- /usr/xpg4/bin/grep -ivf Fic_param_grep-v.txt Fic_balise_adj.temp > Fic_balise_adj.save
- rm Fic_balise_adj.temp #ménage
- 4) Créer un fichier des codes langues présents dans le dump : ./uniq-lang-ref qui crée un fichier Fic_lang_ref.txt. Il reste en final quelques lignes (<10 qui ne correspondent pas à des codes langues. Cela ne gêne pas pour la suite mais on peut toutefois les supprimer à la main avec un éditeur.)
- contenu du script :
- #! /usr/bin/ksh
- #
- # Diverses operations d'édition pour n'obtenir qu'une ligne par code langue présent
- #
- sed 's/==//g' Fic_balise_lang_total.txt >Fic_lang_ref.tmp
- sed 's/{{//g' Fic_lang_ref.tmp >Fic_lang_ref.tmp1
- sed 's/}}//g' Fic_lang_ref.tmp1 >Fic_lang_ref.tmp
- sed 's/ //g' Fic_lang_ref.tmp >Fic_lang_ref.tmp1
- sed 's/=//g' Fic_lang_ref.tmp1 >Fic_lang_ref.tmp
- grep -v ";" Fic_lang_ref.tmp >Fic_lang_ref.tmp1
- grep -v "|" Fic_lang_ref.tmp1 >Fic_lang_ref.tmp
- grep -v ":" Fic_lang_ref.tmp >Fic_lang_ref.tmp1
- grep -v "(" Fic_lang_ref.tmp1 >Fic_lang_ref.tmp
- grep -v "\." Fic_lang_ref.tmp >Fic_lang_ref.tmp1
- grep -v "{" Fic_lang_ref.tmp1 >Fic_lang_ref.tmp
- grep -v "'" Fic_lang_ref.tmp >Fic_lang_ref.tmp1
- grep -v "#" Fic_lang_ref.tmp1 >Fic_lang_ref.tmp
- sort -u Fic_lang_ref.tmp>Fic_lang_ref.txt
- #
- rm Fic_lang_ref.tmp Fic_lang_ref.tmp1 # ménage
- contenu du script :
- 5) Création des fichiers stats : ./stat-wiktio qui crée trois fichiers triés par code langue, par libellé et par nombre d’entrées respectivement Fic_result.txt, Fic-result_libelle.txt et Fic_result_taille.txt.
- contenu du script :
- #! /usr/bin/ksh
- rm Fic_result.tmp
- cp Fic_balise_lang_total.save Fic_balise_lang_total.txt
- cp Fic_balise_nom.save Fic_balise_nom.txt
- cp Fic_balise_flex.save Fic_balise_flex.txt
- cp Fic_balise_verbe.save Fic_balise_verbe.txt
- cp Fic_balise_adj.save Fic_balise_adj.txt
- cp Fic_lang_ref.save Fic_lang_ref.txt
- #
- # Constitution du fichier de statistique
- #
- Stat ()
- {
- cdelang="$1"
- echo "langue : " $cdelang `date`
- count=`/usr/xpg4/bin/grep -c "{{=${cdelang}=}}" Fic_balise_lang_total.txt`
- liblang=`/usr/xpg4/bin/grep "^${cdelang} :" Fic_liste_lang.txt|nawk -F":" '{ print $2 }'`
- count_nom=`/usr/xpg4/bin/grep -c -e "{{-nom-|${cdelang}}}" -e "{{-nom-|${cdelang}|num.*}}" -e "{{-nom-|num.*|${cdelang}}}" Fic_balise_nom.txt`
- count_flex=`/usr/xpg4/bin/grep -c -e "{{-flex-.*|${cdelang}}}" -e "{{-flex-.*|${cdelang}|num.*}}" -e "{{-flex-.*|num.*|${cdelang}}}" Fic_balise_flex.txt`
- count_verbe=`/usr/xpg4/bin/grep -c -e "{{-verb.*-|${cdelang}}}" -e "{{-verb.*-|${cdelang}|num.*}}" -e "{{-verb.*-|num.*|${cdelang}}}" Fic_balise_verbe.txt` # pour prendre en compte -verbe- et -verb-
- count_adj=`/usr/xpg4/bin/grep -c -e "{{-adj.*-|${cdelang}}}" -e "{{-adj.*-|${cdelang}|num.*}}" -e "{{-adj.*-|num.*|${cdelang}}}" Fic_balise_adj.txt` # pour prendre en compte -adj- et -adjectif-
- echo ${cdelang}":"${liblang}":"${count}":"${count_nom}":"${count_flex}":"${count_verbe}":"${count_adj}":" >> Fic_result.tmp
- #
- /usr/xpg4/bin/grep -v "{{=${cdelang}=}}" Fic_balise_lang_total.txt > Fic_balise_lang_total-reste.txt
- /usr/xpg4/bin/grep -v -e "{{-nom-|${cdelang}}}" -e "{{-nom-|${cdelang}|num.*}}" -e "{{-nom-|num.*|${cdelang}}}" Fic_balise_nom.txt > Fic_balise_nom-reste.txt
- /usr/xpg4/bin/grep -v -e "{{-flex-.*|${cdelang}}}" -e "{{-flex-.*|${cdelang}|num.*}}" -e "{{-flex-.*|num.*|${cdelang}}}" Fic_balise_flex.txt > Fic_balise_flex-reste.txt
- /usr/xpg4/bin/grep -v -e "{{-verb.*-|${cdelang}}}" -e "{{-verb.*-|${cdelang}|num.*}}" -e "{{-verb.*-|num.*|${cdelang}}}" Fic_balise_verbe.txt > Fic_balise_verbe-reste.txt # pour prendre en compte -verbe- et -verb-
- /usr/xpg4/bin/grep -v -e "{{-adj.*-|${cdelang}}}" -e "{{-adj.*-|${cdelang}|num.*}}" -e "{{-adj.*-|num.*|${cdelang}}}" Fic_balise_adj.txt > Fic_balise_adj-reste.txt # pour prendre en compte -adj- et -adjectif-
- grep -v ^${cdelang}$ Fic_lang_ref.txt > Fic_lang_ref-reste.txt
- #
- mv Fic_balise_lang_total-reste.txt Fic_balise_lang_total.txt
- mv Fic_balise_nom-reste.txt Fic_balise_nom.txt
- mv Fic_balise_flex-reste.txt Fic_balise_flex.txt
- mv Fic_balise_verbe-reste.txt Fic_balise_verbe.txt
- mv Fic_balise_adj-reste.txt Fic_balise_adj.txt
- mv Fic_lang_ref-reste.txt Fic_lang_ref.txt
- }
- #
- #____________________
- # traitement spécial des 50 langues les plus importantes en nombre (gain de performance)
- for i in fr bg en sl eo it hsb la cs zh nl ja de is io uk vi id es pt ko-hanja fi ca sv el da af et br pl pap no ko fro ses fy hu hbo tr grc ro eu ln conv fa sk ia rm bm
- do
- Stat ${i}
- done
- #__________________
- exec 5<Fic_lang_ref.txt
- while read -u5 cdelang
- do
- echo "langue : " $cdelang `date`
- count=`/usr/xpg4/bin/grep -c "{{=${cdelang}=}}" Fic_balise_lang_total.txt`
- if [[ $count -ne 0 ]] then
- if [[ $cdelang == "tsolyáni" ]] then
- liblang="tsolyàni"
- else
- liblang=`/usr/xpg4/bin/grep "^${cdelang} :" Fic_liste_lang.txt|nawk -F":" '{ print $2 }'`
- fi
- count_nom=`/usr/xpg4/bin/grep -c -e "{{-nom-|${cdelang}}}" -e "{{-nom-|${cdelang}|num.*}}" -e "{{-nom-|num.*|${cdelang}}}" Fic_balise_nom.txt`
- count_flex=`/usr/xpg4/bin/grep -c -e "{{-flex-.*|${cdelang}}}" -e "{{-flex-.*|${cdelang}|num.*}}" -e "{{-flex-.*|num.*|${cdelang}}}" Fic_balise_flex.txt`
- count_verbe=`/usr/xpg4/bin/grep -c -e "{{-verb.*-|${cdelang}}}" -e "{{-verb.*-|${cdelang}|num.*}}" -e "{{-verb.*-|num.*|${cdelang}}}" Fic_balise_verbe.txt` # pour prendre en compte -verbe- et -verb-
- count_adj=`/usr/xpg4/bin/grep -c -e "{{-adj.*-|${cdelang}}}" -e "{{-adj.*-|${cdelang}|num.*}}" -e "{{-adj.*-|num.*|${cdelang}}}" Fic_balise_adj.txt` # pour prendre en compte -adj- et -adjectif-
- echo ${cdelang}":"${liblang}":"${count}":"${count_nom}":"${count_flex}":"${count_verbe}":"${count_adj}":" >> Fic_result.tmp
- fi
- done
- #
- # Constitution des fichiers triés par code et par libellé
- #
- sort -t: +2 -n -r Fic_result.tmp > Fic_result_taille.tmp
- sort -t: +1 Fic_result.tmp > Fic_result_liblang.tmp
- #
- # Numérotation des lignes de ces fichiers
- #
- sed = Fic_result.tmp | sed 'N;s/\n/:/' > Fic_result.txt
- sed = Fic_result_taille.tmp | sed 'N;s/\n/:/' > Fic_result_taille.txt
- sed = Fic_result_liblang.tmp | sed 'N;s/\n/:/' > Fic_result_liblang.txt
- #
- rm Fic_result_liblang.tmp Fic_result_taille.tmp
- contenu du script :
- 6) Ajout de l’évolution par rapport au précédent traitement : delta. Le fichier Fic_result_taille.txt du mois -1 est renommé Fic_result_taille_1.txt.
le fichier en sortie s’appelle FIC.txt
- contenu du script :
- #! /usr/bin/ksh
- typeset -i delta
- rm FIC.txt
- exec 5<Fic_result_taille.txt
- while read -u5 ligne
- do
- cdelang=`echo ${ligne}|nawk -F":" '{ print $2 }'`
- if grep ":${cdelang}:" Fic_result-1.txt>>/dev/null
- then
- ligne_1=`grep ":${cdelang}:" Fic_result-1.txt`
- else
- ligne_1="0:0:0:0:0:0:"
- fi
- pages=`echo ${ligne}|nawk -F":" '{ print $4 }'`
- pages_1=`echo ${ligne_1}|nawk -F":" '{ print $4 }'`
- delta=$((${pages} - ${pages_1}))
- echo ${ligne}${pages_1}":"${delta}"£" >>FIC.txt
- done
- contenu du script :
- 7) Mettre un fichier au format wiki: ./wkfy nom du fichier (passer en argument le fichier voulu par exemple FIC.txt). Le fichier obtenu a comme extension wiki à la place de txt.
- contenu du script :
- #! /usr/bin/ksh
- #
- # Ajout du code wiki
- #
- sed 's/:/! bgcolor="#EEEEFF"+/3' $1 >Fic_temp1
- sed 's/:/! bgcolor="#FEEFFF"+/7' Fic_temp1 >Fic_temp
- sed 's/:/! bgcolor="#FEEFFF"+/7' Fic_temp >Fic_temp1
- sed 's/^/|/g' Fic_temp1 > Fic_temp
- sed 's/:/\
- |/g' Fic_temp > Fic_temp1
- sed 's/!/\
- !/g' Fic_temp1 > Fic_temp
- sed 's/£/\
- |-/g' Fic_temp > Fic_temp1
- sed 's/+/|/g' Fic_temp1 >$1.wiki
- #
- #rm Fic_temp1 Fic_temp
- contenu du script :
- 8) Faire un copier-coller du fichier obtenu dans la page wiki désirée.
Note: Si on ne dispose pas d’une partition Unix sur son PC ou d’une émulation VTnnn vers le serveur Unix, il conviendra de remplacer les copier-coller par des transferts de fichiers.