next up previous
suivant: Exercice facile monter: Extraction d'information avec des précédent: Exemple d'extraction d'informations avec

Exemple avec une chaîne en UTF-8

Nous allons maintenant adapter notre source opengrm pour pouvoir extraire les nombres d'une page web utilisant le codage UTF-8 (un des formats de sérialisation de l'unicode).

Nous allons sélectionner une page web, la prendre avec wget, appliquer le script converter.pl qui nous fournira l'alphabet à utiliser pour notre extraction d'information.

> wget http://www.lemonde.fr
--2016-11-03 10:50:43--  http://www.lemonde.fr/
Résolution de www.lemonde.fr (www.lemonde.fr) 93.184.220.239
Connexion à www.lemonde.fr (www.lemonde.fr)|93.184.220.239|:80 connecté.
requête HTTP transmise, en attente de la réponse 200 OK
Taille_: 387233 (378K) [text/html]
Sauvegarde en_: «index.html»

index.html                        100%[============================================================>] 378,16K  --.-KB/s   ds 0,02s  

2016-11-03 10:50:43 (17,9 MB/s) - «index.html» sauvegardé [387233/387233]

> perl converter.pl 
Entrez le nom du fichier à compiler: index.html
Entrez le nom du fichier à créer: lemonde
conversion terminée
> ls *monde*
lemonde.alp  lemonde.txt  sygma_lemonde.txt
> fstcompile --acceptor lemonde.txt > lemonde.fst
> fstcompile sygma_lemonde.txt > sygma_lemonde.fst
>

Et voici le fichier extractnbutf8.grm. L'alphabet et la page web sont chargées via la fonction LoadFst. Les chaînes présentes sont suffixées par .utf8 pour spécifier le codage utilisé (par défaut, c'est un codage sur un octet qui est utilisé par opengrm).

export alphabet = LoadFst['sygma_lemonde.fst'];

export chiffre = Optimize["0".utf8|"1".utf8|"2".utf8|"3".utf8|"4".utf8|
       "5".utf8|"6".utf8|"7".utf8|"8".utf8|"9".utf8];

export chiffre_id = Optimize[("0".utf8:"0".utf8)|("1".utf8:"1".utf8)|("2".utf8:"2".utf8)|("3".utf8:"3".utf8)|("4".utf8:"4".utf8)|("5".utf8:"5".utf8)|("6".utf8:"6".utf8)|("7".utf8:"7".utf8)|("8".utf8:"8".utf8)|("9".utf8:"9".utf8)];

export pas_chiffre = alphabet - chiffre;

pre_extract_chiffre = (alphabet : "".utf8)* (pas_chiffre:"".utf8) (chiffre_id+)
		(pas_chiffre:"".utf8)(alphabet : "".utf8)*;

export extract_chiffre = Optimize[pre_extract_chiffre];

export chaine_test_1 = LoadFst['lemonde.fst'];

export composition = Optimize[chaine_test_1 @ extract_chiffre];

export projection = Project[composition,'output'];

export result = Optimize[projection];

Puis on compile tout ça et on extrait les nombres trouvés dans la page.

> thraxmakedep extractnbutf8.grm
> make
> farextract extractnbutf8.far
> fst_printstrings --utf8 --acceptor result
0
00
000
002
007
009
01
0105
011
012
01213
01398
...
99523571
9988
9989
99936
> fst_printstrings --utf8 --acceptor result | wc
   1302    1302    7699

La dernière ligne compte combien il y a de nombres extraits de la page: il y en a 1302 (ce ne sera peut-être pas le même nombre pour vous puisque la une du monde change en permanence).



barthe 2016-11-03