首页 > 解决方案 > 如何从一个句子中构建几个语法树?

问题描述

我正在研究基于上下文无关语法的俄语解析器,我想为每个句子构建语法树。有证据表明,每个句子可以有几棵树。

我不确定构建所有这些树的有效方法是什么。

我做了什么:

1)经过一些处理后,我有一个句子,其中每个单词都有几个标签 2)然后我建立一棵树叶是单词的树,然后我将单词简化为更一般的短语(根据语法);每次减少 - 新节点。3) 当所有归约完成后,尝试使用“S -> NP[sbj] VP”规则生成root。只有在语法之间达成一致时才会发生这种情况。

结果是根存在的所有树。

parser.parse(sent)
[['я', "NP[case='nomn']", ['NPRO', 'sing', '1per', None, 'nomn', None, None]]]

[['хочу', 'V[tran]', ['VERB', 'sing', '1per', None, None, 'tran', 'pres']]]

[['писать', 'VP', ['INFN', None, None, None, None, 'tran', None]], ['писать', 'VP', ['INFN', None, None, None, None, 'intr', None]]]

[['письмо', "NP[case='accs']", ['NOUN', 'sing', None, 'neut', 'accs', None, None]], ['письмо', "NP[case='nomn']", ['NOUN', 'sing', None, 'neut', 'nomn', None, None]]]

[['другу', "NP[case='datv']", ['NOUN', 'sing', None, None, 'datv', None, None]]]

# it is simple example, usually, each word has 3-4 tags.

幼稚的方法是采用所有可能的单词组合并尝试从中创建树。这种方法的复杂性非常大。我怎样才能以更有效的方式完成这项任务?

标签: pythontreenlp

解决方案


推荐阅读