在Python的英文维基百科中查找两篇文章之间的最短路径

Jef*_*nic 11 python algorithm dijkstra

问题:

找到英文维基百科中两篇文章之间的最短路径.如果存在文章C(i)并且文章A中存在导致文章C(1)的链接,则存在文章A和B之间的路径,在文章C(1)中链接导致文章C(2),... .在文章C(n)中是指向B条的链接

我正在使用Python.下载维基百科文章的URL:

  1. http://en.wikipedia.org/wiki/Nazwa_artykułu
  2. http://en.wikipedia.org/w/index.php?title?Nazwa_artykułu&printable=yes
  3. 维基百科API

我已经编辑了我的源代码,但是当我在代码中包含这些文章时它仍然不起作用任何人都可以告诉我在这里搞砸了什么?

这是我的代码:

import urllib2
import re
import xml.etree.ElementTree as ET

text = ET.fromstring(F_D.text.encode('UTF-8'))
text = ET.fromstring(P.text.encode('UTF-8'))
F_D=requests.get('http://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms')
P=requests.get('http://en.wikipedia.org/wiki/Wikipedia:Unusual_articles')  
links = text.findall('.//*[@id=”mw-content-text”]/p/a')

links=E_D

E_D = graph_dict
E_D[start] = 0

for vertex in E_D:
    F_D[vertex] = E_D[vertex]
    if vertex == end: break

    for edge in graph[vertex]:
        path_distance = F_D[vertex] + graph[vertex][edge]
        if edge in F_D:
            if path_distance < F_D[edge]:
                #raise ValueError,
            elif edge not in E_D or path_distance < E_D[edge]:
                E_D[edge] = path_distance
                [edge] = vertex
return (F_D,P)

def Shortest_Path(graph,start,end):
  F_D,P = D_Algorithm(graph,start,end)
  path = []
  while 1:
    path.append(end)
    if end == start: break
    end = P[end]
  path.reverse()
  return path
Run Code Online (Sandbox Code Playgroud)

met*_*urg 2

我们正在研究图探索...为什么你应该考虑 Dijkstra 算法???恕我直言...改变方法。

首先,您需要一个良好的启发式函数。对于您扩展的每个节点,您需要估计该节点与目标节点的距离。现在......如何计算启发式是这里真正的挑战。您也许可以在当前 wiki 页面和目标页面之间进行关键字映射。匹配百分比可以为您提供估计值。或者...尝试猜测两个页面之间内容的相关性。我有一种预感......也许神经网络可以在这里帮助你。但是,这也可能并不表示最佳估计。我不知道。一旦找到合适的方法,就可以使用 A* 搜索算法。

搜索和探索启发式功能,不要进行广度优先搜索,你将在浩瀚的维基百科世界中一无所获!