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值,赋值给一个新图。
代码如下:
new_graph = {}
for d0

本文详细介绍了Chu-Liu/Edmonds算法在无环解析中的应用,首先介绍了数据结构——Python嵌套字典,接着阐述了算法的两个关键步骤:移除进入根节点的弧和选择权重最大输入弧。博客主要关注无循环的依存树解析,并提供了代码示例和图形化解释。
最低0.47元/天 解锁文章
522

被折叠的 条评论
为什么被折叠?



