C'est assez énigmatique, n'est-ce pas. Il s'agit essentiellement d'un dictionnaire, mais vous pouvez en plus vérifier si une chaîne de caractères est un préfixe d'une clé connue :
>>> t = Trie()
>>> t['they'] = 15
>>> 'the' in t
True
>>> print t['the']
None
Il y a aussi find_prefix
qui correspondra à la plus grande partie possible de son argument, et retournera la valeur qu'il y trouve (le cas échéant) plus le reste de l'argument :
>>> t.find_prefix("theirs")
(None, 'irs') # Prefix "the" has no value
Vous pourriez jeter un coup d'œil à la source dans nltk/containers.py
. La magie est dans les méthodes __setitem__
y __getitem__
qui traitent les expressions de la forme t[key]
.
Bon à savoir également : Le site keys()
ne renverra que les entrées réelles, pas les préfixes. Vous pouvez l'utiliser avec la méthode subtrie
pour retrouver tous les mots qui commencent par un préfixe donné :
>>> t.subtrie('th').keys()
['ey']
PS. Notez que containers.py
a été retiré du NLTK il y a environ six mois ! Avant de mettre à jour votre distribution nltk (ce que vous devriez faire), sauvegardez nltk/containers.py
sous un autre nom. Mieux encore, enregistrez simplement le Trie
classe. (Le reste du fichier est obsolète).