将单词列表解析为树

Vel*_*ost 5 python tree parsing data-structures

我有一个单词列表.例如:

reel
road
root
curd
Run Code Online (Sandbox Code Playgroud)

我想以反映以下结构的方式存储此数据:

Start -> r -> e -> reel
           -> o -> a -> road
                   o -> root
         c -> curd
Run Code Online (Sandbox Code Playgroud)

对我来说很明显,我需要实现一棵树.从这棵树,我必须能够轻松获得统计信息,如节点的高度,节点的后代数,搜索节点等.添加节点应该"自动"将其添加到树中的正确位置,因为此位置是唯一的.

它还希望能够以实际图形树的形式可视化数据.由于树将变得庞大,我需要在可视化上进行缩放/平移控制.当然,漂亮的可视化总是比丑陋的更好.

有没有人知道Python包可以让我简单地实现这一切?自己编写代码需要很长时间.您认为http://packages.python.org/ete2/适合此任务吗?

我正在使用Python 2.x,顺便说一下.


我发现NLTK有一个特里类 - nltk.containers.trie.这对我来说很方便,因为我已经使用了NLTK.有谁知道如何使用这个类?我在任何地方都找不到任何例子!例如,如何在trie中添加单词?

pei*_*ixe 4

ETE2是一个树探索环境,原则上是为浏览、构建和探索系统发育树而设计的,我很早以前就将它用于这些目的。但如果你正确设置数据,你就有可能完成它。

您只需在需要分割树并创建分支的地方放置圆括号即可。请参阅以下示例,取自 ETE 文档。如果你改变这些“(A,B,(C,D));” 对于你的言语/信件,应该这样做。

from ete2 import Tree
unrooted_tree = Tree( "(A,B,(C,D));" )
print unrooted_tree
Run Code Online (Sandbox Code Playgroud)

输出:

     /-A
    |
----|--B
    |
    |     /-C
     \---|
          \-D
Run Code Online (Sandbox Code Playgroud)

...这个包将让您完成您想要的大部分操作,让您有机会单独选择每个分支,并以简单的方式进行操作。无论如何,我建议你看看教程,不是很困难:)