Difference between revisions of "Calculer la couverture"
		
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
		
		
		
		
		
	
|  (Lien page anglaise) | |||
| Line 1: | Line 1: | ||
| [[Calculating coverage|In English]] | |||
| Notes sur le calcul de la couverture à partir de dumps wikipédia (basé sur la page [[Asturian#Calculating coverage]]).  | Notes sur le calcul de la couverture à partir de dumps wikipédia (basé sur la page [[Asturian#Calculating coverage]]).  | ||
Latest revision as of 07:05, 8 October 2014
Notes sur le calcul de la couverture à partir de dumps wikipédia (basé sur la page Asturian#Calculating coverage).
(La commande 'sed' de Mac OS X ne permet pas les remplacements de \n , donc on utilise un vrai passage à la ligne précédée d'un \ )
wikicat.sh:
#!/bin/sh
# Nettoyer le texte wiki pour l'utiliser via apertium-destxt
# awk affiche des lignes complètes, s'assurer que chaque élément html en possède une
bzcat "$@" | sed 's/>/>\
/g' | sed 's/</\
</g' |\
# on veut seulement ce qu'il y a entre <text...> et </text>
awk '
/<text.*>/,/<\/text>/ { print $0 }
' |\
sed 's/\./ /g' |\
# supprimer tous les liens transwiki
sed 's/\[\[\([a-z]\{2,3\}\|bat-smg\|be-x-old\|cbk-zam\|fiu-vro\|map-bms\|nds-nl\|roa-rup\|roa-tara\|simple\|zh-classical\|zh-min-nan\|zh-yue\):[^]]\+\]\]//g' |\
# balise wiki, garder bar et fie de [[foo|bar]] [[fie]]
sed 's/\[\[[^]|]*|//g' | sed 's/\]\]//g' | sed 's/\[\[//g' |\
# balise wiki, garder `bar fie' de [http://foo bar fie] et enlever [http://foo]
sed 's/\[http[^ ]*\([^]]*\)\]/\1/g' |\
# enlever les entités
sed 's/&[^;]*;/ /g' |\
# et mettre des espaces autour de la ponctuation
sed 's/[;:?,]/ /g' |\
# Garder seulement les lignes commençant par une lettre capitale, enlever les tables avec des informations de style etc.
grep '^[ 	]*[A-ZÆØÅ]' # Votre alphabet ici
count-tokenized.sh:
#!/bin/sh # http://wiki.apertium.org/wiki/Asturian#Calculating_coverage # Calculer le nombre de mots tokenisés dans le corpus : apertium-destxt | lt-proc $1 |apertium-retxt |\ # pour une raison inconnue mettre directement un changement de ligne ne marche pas, donc deux sed sed 's/\$[^^]*\^/$^/g' | sed 's/\$\^/$\ ^/g'
Pour trouver tous les tokens dans un dump wiki :
$ ./wikicat.sh nnwiki-20090119-pages-articles.xml.bz2 > nnwiki.cleaned.txt cat nnwiki.cleaned.txt | ./count-tokenized.sh nn-nb.automorf.bin | wc -l
Pour trouver tous les tokens avec au moins une analyse (couverture naïve) :
$ cat nnwiki.cleaned.txt | ./count-tokenized.sh nn-nb.automorf.bin | grep -v '\/\*' | wc -l
Pour trouver les tokens de tête inconnus :
$ cat nnwiki.cleaned.txt | ./count-tokenized.sh nn-nb.automorf.bin | sed 's/[ ]*//g' |\ # tabulation ou espace grep '\/\*' | sort -f | uniq -c | sort -gr | head
Script prêt à l'emploi[edit]
corpus-stat.sh
#!/bin/sh # http://wiki.apertium.org/wiki/Asturian#Calculating_coverage # Exemple utilisé : # zcat corpa/en.crp.txt.gz | sh corpus-stat.sh #CMD="cat corpa/en.crp.txt" CMD="cat" F=/tmp/corpus-stat-res.txt # Calculer le nombre de mots tokenisés dans le corpus : # pour une raison inconnue mettre directement un changement de ligne ne marche pas, donc deux sed $CMD | apertium-destxt | lt-proc en-eo.automorf.bin |apertium-retxt | sed 's/\$[^^]*\^/$^/g' | sed 's/\$\^/$\ ^/g' > $F NUMWORDS=`cat $F | wc -l` echo "Nombre de mots tokenisés dans le corpus : $NUMWORDS" # Calculer le nombre de mots qui ne sont pas inconnus NUMKNOWNWORDS=`cat $F | grep -v '\*' | wc -l` echo "Nombre de mots connus dans le corpus : $NUMKNOWNWORDS" # Calculer la couverture COVERAGE=`calc "round($NUMKNOWNWORDS/$NUMWORDS*1000)/10"` echo "Couverture : $COVERAGE %" # Si vous ne disposez pas de calc, changez la ligne précédente par : #COVERAGE=$(perl -e 'print int($ARGV[0]/$ARGV[1]*1000)/10;' $NUMKNOWNWORDS $NUMWORDS) # Montrer les 10 mots inconnus les plus fréquents. echo "Mots inconnus les plus fréquents dans le corpus :" cat $F | grep '\*' | sort -f | uniq -c | sort -gr | head -10
Exemple de sortie :
$ zcat corpa/en.crp.txt.gz | sh corpus-stat.sh
Nombre de mots tokenisés dans le corpus : 478187
Nombre de mots connus dans le corpus : 450255
Couverture : 	94.2 %
Mots inconnus les plus fréquents dans le corpus :
    191 ^Apollo/*Apollo$
    104 ^Aramaic/*Aramaic$
     91 ^Alberta/*Alberta$
     81 ^de/*de$
     80 ^Abu/*Abu$
     63 ^Bakr/*Bakr$
     62 ^Agassi/*Agassi$
     59 ^Carnegie/*Carnegie$
     58 ^Agrippina/*Agrippina$
     58 ^Achilles/*Achilles$
     56 ^Adelaide/*Adelaide$

