我如何使用nltk.containers.Trie?

时间:2012-06-04 10:43:48

标签: python data-structures nltk trie

我想使用nltk.containers.Trie来执行简单的操作,例如将单词插入到trie中,检索具有给定前缀的所有单词,查找具有最多后代的节点(即最常见的前缀),以图形方式查看trie等等上。我找不到任何关于这种结构使用的文件。以下是我到目前为止的所有内容:

from nltk.containers import Trie
t = Trie()

我现在有一个单词列表,我需要添加到trie中。

1 个答案:

答案 0 :(得分:4)

这很神秘,不是吗。它基本上是一个字典,但您还可以检查字符串是否是已知密钥的前缀

>>> t = Trie()
>>> t['they'] = 15
>>> 'the' in t
True
>>> print t['the']
None

还有find_prefix,它将尽可能多地匹配其参数,并返回它在那里找到的值(如果有的话)加上参数的其余部分:

>>> t.find_prefix("theirs")
(None, 'irs')                 # Prefix "the" has no value

您可以查看nltk/containers.py中的来源。神奇的方法是__setitem____getitem__,它们处理t[key]形式的表达式。

另外要知道的是:keys()方法只返回实际条目,而不是前缀。您可以使用方法subtrie来检索以给定前缀开头的所有单词:

>>> t.subtrie('th').keys()
['ey']

PS。请注意,大约六个月前,containers.py已从NLTK中删除了!在更新nltk发行版(您应该)之前,请使用其他名称保存nltk/containers.py。更好的是,只需保存Trie类。 (文件的其余部分已过时)。