2 votes

Comment utiliser nltk.containers.Trie ?

Je veux utiliser nltk.containers.Trie pour effectuer des opérations simples comme insérer un mot dans le trie, récupérer tous les mots avec un préfixe donné, trouver les nœuds avec le plus de descendants (c'est-à-dire les préfixes les plus communs), visualiser graphiquement le trie et ainsi de suite. Je n'ai pas trouvé la moindre documentation concernant l'utilisation de cette structure. Voici tout ce que j'ai jusqu'à présent :

from nltk.containers import Trie
t = Trie()

J'ai maintenant une liste de mots que je dois ajouter au test.

4voto

alexis Points 10856

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X