如何在Python中将文档拆分为树?

时间:2015-03-21 18:58:51

标签: python nlp

所以我有一些基本的代码:

text='''Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sit     amet sapien velit, ac sodales   
 ante. Integer mattis eros non turpis interdum et auctor enim consectetur, etc.

Praesent molestie suscipit bibendum. Donec justo purus, venenatis eget convallis sed, feugiat    
 vitae velit,etc.'''

paras=text.split("\n")

class Node:
    def __init__(self, name, children=None):
        self.name=name
        self.children=children
    def getchildren(self):
        return self.children
    def addchild(self, name):
        self.children.append(name)

class Tree:
    def __init__(self):
        self.nodes=[]
    def nodes(self):
        return self.nodes
    def add_node(self,ID,parent=None):
        node=Node(ID)
        self.ID=node
        if parent is not None:
            self.parent.addchild(ID)

但是,我不知道如何实际使用它来将文本分解为树。我想把它分解为段落和句子级别。句子下面我会有名词。

这是我尝试实施分形汇总算法的第一步。

2 个答案:

答案 0 :(得分:0)

有几种方法可以实现这一目标。

您可以使用列表推导和一些拆分,因为您的结构没有太深层嵌套。举个例子:

nested_list = [[w.split(' ') for w in s.split('. ')] for s in paras] 

这实际上通过列出列表列表来获得“树”。虽然这很方便,但也不是那么强大。

通常解决此问题的方法是使用所谓的“标记器”,“词法”和“解析树”。我建议查看pyparsing这是一个python库,用于构造任意语法并从中创建解析树。

答案 1 :(得分:0)

我认为第一步是解析段落。然后你可以很容易地将它放入树中。你还说你想把名词当作孩子,这意味着你需要知道哪些词是名词。除非你解析它,否则你将无法检测到段落的词性(POS)。

您可以使用NLTK(有助于学习目的),或者更好地使用Stanford coreNLP / Berekeley NLP解析器。

获得解析后的结构后,构建树很容易。