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