Textrank:使用networkx补充pagerank以进行句子提取
Posted
技术标签:
【中文标题】Textrank:使用networkx补充pagerank以进行句子提取【英文标题】:Textrank: complementing pagerank for sentence extraction using networkx 【发布时间】:2012-03-04 02:07:32 【问题描述】:我正在尝试按照here 的描述实现用于句子提取的 textrank 算法。为此,需要用加权边来补充 pagerank 算法并让它在无向图上运行。 Networkx pagerank 算法实现允许我轻松集成加权边,据说可以将有向图转换为无向图:参见here。 但是,当我测试时,它似乎仍然使用有向图。我在这里想念什么?非常感谢。
例子:
import networkx as nx
D=nx.DiGraph()
D.add_weighted_edges_from([('A','B',0.5),('A','C',1)])
print nx.pagerank(D)
输出:'A':0.25974025929223499,'C':0.40692640737443164,'B':0.33333333333333331
【问题讨论】:
【参考方案1】:可以在here 中找到 Python 中 TextRank 算法的一个很好的实现。 如果你想使用这个脚本,你必须事先运行 nltk.download() 来安装必要的数据文件,如here所述。
【讨论】:
该实现不是针对句子提取,而是针对关键字提取。您可以从代码下方的 cmets 中看到。【参考方案2】:我认为您误解了 networkx 文档中的注释。不过,我必须承认它的措辞可能更好。
PageRank 算法是为有向图设计的,但是这 算法不检查输入图是否有向并且将 通过转换每个有向边在无向图上执行 有向图到两条边。
这说明,PageRank 算法是为有向图设计的,但它也可以用于无向图。为此,它将无向网络转换为有向网络,方法是将每条边替换为两条有向边(输入和输出)。
因此,如果给它一个有向网络,它会根据有向结构计算PageRank。所以要么从无向网络开始:
import networkx as nx
# Undirected Network
D = nx.Graph()
D.add_weighted_edges_from([('A', 'B', 0.5),('A', 'C', 1)])
# Default max number of iterations failed to converge for me
print nx.pagerank(D, max_iter=200)
# Outputs:
'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982
或者如果您已经有一个有向网络,请将其转换为无向网络:
import networkx as nx
# Directed Network
D = nx.DiGraph()
D.add_weighted_edges_from([('A', 'B', 0.5), ('A', 'C', 1)])
# Convert to undirected
G = D.to_undirected()
# Default max number of iterations failed to converge for me
print nx.pagerank(G, max_iter=200)
# Outputs:
'A': 0.48648648872844047, 'C': 0.32567567418103965, 'B': 0.18783783709051982
【讨论】:
我的错误。感谢您的解决方案。以上是关于Textrank:使用networkx补充pagerank以进行句子提取的主要内容,如果未能解决你的问题,请参考以下文章
关键字提取算法TF-IDF和TextRank(python3)————实现TF-IDF并jieba中的TF-IDF对比,使用jieba中的实现TextRank