【问题标题】:Converting output of dependency parsing to tree将依赖解析的输出转换为树
【发布时间】:2016-09-06 04:56:09
【问题描述】:

我正在使用Stanford dependency parser,我得到以下句子的输出

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

python dep_parsing.py 
[((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')), ((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')), ((u'elephant', u'NN'), u'det', (u'an', u'DT')), ((u'shot', u'VBD'), u'nmod', (u'sleep', u'NN')), ((u'sleep', u'NN'), u'case', (u'in', u'IN')), ((u'sleep', u'NN'), u'nmod:poss', (u'my', u'PRP$'))]

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

我需要图形结构进行进一步处理,因此如果修改它很容易并且必须易于表示,这将有所帮助。

这是我到目前为止的代码。

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

如何制作这样的图结构?

【问题讨论】:

    标签: python data-structures nlp dependency-parsing


    【解决方案1】:

    你可以遍历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 )
    

    更多信息您可以查看:NLTK Dependencygraph方法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() 确实创建了一棵树,但是,我想要一个有向图,其中边是两个术语之间的关系,在这种情况下是缺失的。我怎样才能创建/显示这个?
    • 那我想你要打印 dep.to_dot(),对于布局:en.wikipedia.org/wiki/…
    • 是的,它有效,但现在我如何在不修改现有三元组的情况下向该图中添加一些东西(因为它返回 unicode)?我还如何以图形方式查看(例如弹出一些图像等,而不仅仅是在终端中)?有图书馆吗?
    • 但是,我会接受你的回答,因为它部分解决了我的问题。
    • DOT 是标准格式。对于布局,您可以检查 - 我在之前的评论中提到的维基百科页面上的 Graphviz 和其他人。
    猜你喜欢
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2022-01-08
    • 1970-01-01
    • 2017-07-13
    • 2018-03-20
    相关资源
    最近更新 更多