Chu-Liu/Edmonds算法之无环解析
本篇博客是进一步介绍Chu-Liu/Edmonds算法是如何实施的。
前期介绍
该实验用的数据结构是python的嵌套字典,形如:
graph = {‘root’: {‘w0’: 3, ‘w1’: 4, ‘w2’: 3}, ‘w0’: {‘root’: 9, ‘w1’: 30, ‘w2’: 11}, ‘w1’: {‘root’: 10, ‘w0’: 20, ‘w2’: 0}, ‘w2’: {‘root’: 9, ‘w0’: 3, ‘w1’: 30}}
其中外层字典的key值是依存对中的依赖项,内层字典的key值是依存对中的核心词,内层字典的value值是依存对的权重,也就是依存对成立的可能性的大小。Chu-Liu/Edmonds算法要做的就是为除了根节点以为的其他词找到核心词。该篇博客只谈没循环的依存树,之后再讲有循环的如何解析。
具体步骤
1、如果有进入根的弧,则将其全部丢弃;
这个步骤比较好处理,只有将字典中:’root’: {‘w0’: 3, ‘w1’: 4, ‘w2’: 3}这个部分删掉,就不存在进入根节点的弧了。
如下图,将红色弧去掉:
2、对于除根以外的每个节点,选择权重最大的输入弧,让所选的n-1个弧成为集合s
这一步写了一个循环,逐个比较内层字典的value值,选出最大的并且记录当前的key值,赋值给一个新图。
代码如