Sous-sections

Prise en main de l'interface Python

Il y a deux modes d'utilisation de Python: le mode interactif où les instructions sont tapées et immédiatement exécutées et le mode script où les instructions sont d'abord tapées dans un fichier puis exécutées.

Créer un automate

Deux façon de créer un objet Python représentant un automate ou un transducteur (classe Fst): donner une description textuelle et la compiler (équivalent de fstcompile) ou lire un fichier contenant un automate ou un transducteur.

Premier cas: création sans fichier de symbole.

import pywrapfst as fst

compiler = fst.Compiler(acceptor=True)
print >> compiler, "0 1 1"
print >> compiler, "1 2 2"
print >> compiler, "2 3 3"
print >> compiler, "3"
auto1 = compiler.compile()

print(auto1)
print(type(auto1))

Commentaire: fst.Compiler(acceptor=True) est un appel au constructeur de la classe Compiler: cela crée et renvoie un objet. Les lignes textuelles de description des arcs et des états finals sont écrite sur le compilateur et à la fin, la méthode compile crée l'objet automate (classe Fst).

L'exécution de ce programme produit l'affichage suivant.

> Python tp.py 
0       1       1
1       2       2
2       3       3
3

<type 'pywrapfst._MutableFst'>

Cas 2: avec un fichier de symbole. On suppose qu'il existe un fichier titalph.sym contenant les lignes suivantes:

epsilon 0
a       1
b       2
c       3
x       4
y       5
z       6

Ce fichier peut être lu pour créer un objet de la classe SymbolTable qui peut être utilisé pour créer un automate.

tab = fst.SymbolTable.read_text('titalph.sym')

compiler = fst.Compiler(acceptor=True,isymbols=tab)


print >> compiler, "0 1 a"
print >> compiler, "1 2 b"
print >> compiler, "2 3 c"
print >> compiler, "3"

auto2 = compiler.compile()
print(auto2)

Cas 3: lecture d'un automate ou d'un transducteur dans un fichier. Ce fichier a pu être créé aussi bien par un programme Python que par fstcompile ou opengrm: c'est le même format de fichier qui est utilisé dans les trois cas. Le code suivant suppose que le fichier exemple.fst existe.

auto3 = fst.Fst.read("exemple.fst")
print(auto3)

Appeler des méthodes

On peut utiliser les objets créés de différentes manières. On peut notamment appeler des méthodes et des fonctions qui implémentent les opérations correspondant aux commandes fstunion, fstrmepsion, etc.

Les opérations existantes dans un objet de la classe Fst (ou des sous-classes comme _MutableFst): closure (*), union, concat, minimize, project, rmepsilon. Voyons un exemple de concaténation.

print("avant concatenation")
print("auto1:")
print(auto1)
print("auto2:")
print(auto2)
auto1.concat(auto2)
print("apres auto1.concat(auto2)")
print("auto1:")
print(auto1)
print("auto2:")
print(auto2)

Ce code (qui suppose que auto1 et auto2 ont été créés comme à la section précédente), affiche:

avant concatenation
auto1:
0       1       1
1       2       2
2       3       3
3

auto2:
0       1       1
1       2       2
2       3       3
3

apres auto1.concat(auto2)
auto1:
0       1       1
1       2       2
2       3       3
3       4       0
4       5       1
5       6       2
6       7       3
7

auto2:
0       1       1
1       2       2
2       3       3
3

On constate donc que l'objet auto1 sur lequel la méthode a été appelée contient le résultat de l'opération.

L'objet contient des méthodes permettant de réer des fichiers: la méthode write qui écrit un fichier de type automate openfst et le méthode draw qui crée un fichier de type dot (équivalent de fstdraw).

auto1.write('auto1.fst')
auto1.draw('auto1.dot')

Appeler des fonctions

Certaines opérations n'existent pas dans les objets sous forme de méthodes. Elles existent dans le module pwrapfst sous forme de fonctions. C'est par exemple le cas de l'intersection, de la déterminisation, de la différence ensembliste, etc.

Voici des exemples:

auto4=fst.intersect(auto1,auto2)
auto5=fst.determinize(auto3)

Certaines opérations existent à la fois en tant que méthodes et en tant que fonctions: c'est le cas de l'union, la concaténation, etc. La différence entre les deux implémentations est que la méthode change l'objet sur lequel elle est appelée alors que la fonction crée un nouvel objet sans modifier aucun des objets passés en paramètres.

auto6=fst.concat(auto1,auto2)

Obtenir la documentation

Vous pouvez avoir la documentation de l'interface Python avec la commande à taper dans un terminal:

pydoc pywrapfst

Vous pouvez aussi avoir une documentation avec la fonction Python help à mettre dans le script ou dans le mode interactif de Python.

help(fst)
help(fst.Fst)
help(auto2)

barthe 2018-01-31