Wiktionnaire:Statistiques/code Unsui/Documentation

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

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
  • 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
  • 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
  • 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
  • 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.