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

2024-04-25 22:08:52 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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)

但是,我不知道如何实际使用它将文本分解成树。我想把它分成段落和句子两个层次。句子下面是名词。你知道吗

这是我尝试实现分形摘要算法的第一步。你知道吗


Tags: textnameselfnoneidnodedefetc
2条回答

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

您可以使用NLTK(对于学习目的很好),或者更好地使用Stanford coreNLP/Berekeley NLP解析器。你知道吗

一旦得到解析后的结构,构建树就非常容易了。你知道吗

有几种方法可以做到这一点。你知道吗

您可以使用列表理解和一些拆分,因为您的结构嵌套不太深。例如:

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

这本质上是通过拥有一个列表列表得到一棵“树”。虽然这很方便,但也不是很强大。你知道吗

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

相关问题 更多 >