我想使用 nltk.containers.Trie 执行简单的操作,例如将单词插入 trie,检索具有给定前缀的所有单词,查找具有大多数后代(即最常见的前缀)的节点,以图形方式查看 trie 等等。我找不到任何有关使用此结构的文档。这是我到目前为止的所有内容:
from nltk.containers import Trie
t = Trie()
我现在有一个需要添加到 trie 中的单词列表。
我想使用 nltk.containers.Trie 执行简单的操作,例如将单词插入 trie,检索具有给定前缀的所有单词,查找具有大多数后代(即最常见的前缀)的节点,以图形方式查看 trie 等等。我找不到任何有关使用此结构的文档。这是我到目前为止的所有内容:
from nltk.containers import Trie
t = Trie()
我现在有一个需要添加到 trie 中的单词列表。
这很神秘,不是吗。它基本上是一个字典,但您还可以检查字符串是否是已知键的前缀:
>>> 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
课程。(文件的其余部分已过时)。