Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将依赖项解析的输出转换为树_Python_Data Structures_Nlp_Dependency Parsing - Fatal编程技术网

Python 将依赖项解析的输出转换为树

Python 将依赖项解析的输出转换为树,python,data-structures,nlp,dependency-parsing,Python,Data Structures,Nlp,Dependency Parsing,我使用的是Stanford依赖项解析器,我得到以下句子的输出 我在睡梦中射杀了一头大象 我想将其转换为一个图形,其中节点是每个标记,边是它们之间的关系。 我需要进一步处理的图形结构,因此它将有助于如果修改它很容易,也必须很容易表示 这是我到现在为止的密码 from nltk.parse.stanford import StanfordDependencyParser stanford_parser_dir = 'stanford-parser/' eng_model_path = stanfor

我使用的是
Stanford依赖项解析器
,我得到以下句子的输出

我在睡梦中射杀了一头大象

我想将其转换为一个图形,其中节点是每个标记,边是它们之间的关系。

我需要进一步处理的图形结构,因此它将有助于如果修改它很容易,也必须很容易表示

这是我到现在为止的密码

from nltk.parse.stanford import StanfordDependencyParser
stanford_parser_dir = 'stanford-parser/'
eng_model_path = stanford_parser_dir  + "stanford-parser-models/edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir  + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir  + "stanford-parser.jar"

dependency_parser = StanfordDependencyParser(path_to_jar=my_path_to_jar, path_to_models_jar=my_path_to_models_jar)

result = dependency_parser.raw_parse('I shot an elephant in my sleep')
dep = result.next()
a = list(dep.triples())
print a

如何制作这样的图形结构?

您可以遍历
dep.triples()
并获得所需的输出

代码:

for triple in dep.triples():
    print triple[1],"(",triple[0][0],", ",triple[2][0],")"
nsubj ( shot ,  I )
dobj ( shot ,  elephant )
det ( elephant ,  an )
nmod ( shot ,  sleep )
case ( sleep ,  in )
nmod:poss ( sleep ,  my )
输出:

for triple in dep.triples():
    print triple[1],"(",triple[0][0],", ",triple[2][0],")"
nsubj ( shot ,  I )
dobj ( shot ,  elephant )
det ( elephant ,  an )
nmod ( shot ,  sleep )
case ( sleep ,  in )
nmod:poss ( sleep ,  my )
有关更多信息,您可以查看:方法
triples()
to_dot()
dep.tree().draw()

编辑-

dep.to_dot()
的输出为

digraph G{
edge [dir=forward]
node [shape=plaintext]

0 [label="0 (None)"]
0 -> 2 [label="root"]
1 [label="1 (I)"]
2 [label="2 (shot)"]
2 -> 4 [label="dobj"]
2 -> 7 [label="nmod"]
2 -> 1 [label="nsubj"]
3 [label="3 (an)"]
4 [label="4 (elephant)"]
4 -> 3 [label="det"]
5 [label="5 (in)"]
6 [label="6 (my)"]
7 [label="7 (sleep)"]
7 -> 5 [label="case"]
7 -> 6 [label="nmod:poss"]
}

dep.tree().draw()
确实创建了一棵树,但是,我想要一个有向图,其中边是两个术语之间的关系,在本例中缺少边。我如何创建/显示它?那么我想您希望print dep.to_dot()用于布局:是的,它工作了,但是现在我如何在不修改现有三元组(因为它返回unicode)的情况下向该图形中添加内容?另外,我如何以图形方式查看(比如弹出一些图像等,而不仅仅是在终端中)?有图书馆吗?不过,我会接受你的回答,因为它部分解决了我的问题。点是标准格式。对于布局,你们可以在维基百科的页面上查看-Graphviz和其他我在前面的评论中提到的内容。