维基百科集成问题 - 需要最终解决这个问题101

时间:2009-06-16 12:25:22

标签: php mysql wikipedia data-mining

对不起伙计们,我一直在运行一个模拟器询问如何将维基百科数据集成到我的应用程序中,坦率地说,我不认为我已经取得了任何成功,因为我一直在尝试所有的想法和当我读到一个死胡同或障碍时,有点放弃。我会试着解释一下我到底想要做什么。

我有一个简单的城市和国家/地区的目录。我的应用程序是一个简单的基于PHP的基于Ajax的应用程序,具有搜索和浏览功能。人们注册并与城市联系,当用户浏览城市时 - 他/她可以看到该城市中的人和公司,即谁是我们系统的一部分。

这部分很容易设置,并且工作正常。问题是我的搜索结果将是格式,即有人搜索说北京。它将返回三个选项卡式界面框:

  1. First Tab将为北京提供信息框包含城市信息
  2. Seond将是一个国家标签,其中包含来自CHina的国家信息的信息框。
  3. 第三个标签将包含北京所有联系人的列表。
  4. 前两个标签的内容应该来自维基百科。现在我完全迷失了最好的方法来完成这项工作,而且一旦决定了一种方法,那么我该怎么做才能做到这一点它非常强大。

    到目前为止,我能够消化的一些好的和坏的想法是:

    1. 直接向维基百科运行curl请求,并在每次搜索时解析返回的数据。在这种维基百科上的数据的情况下,没有必要维护本地副本。另一个问题是它完全依赖于来自远程第三位置的数据,我怀疑每次向维基百科发送请求以检索基本信息是可行的。另外考虑到维基百科上的数据需要在每次请求时进行解析 - 这将超过大量服务器负载......或者我在这里猜测。

    2. 下载维基百科转储并查询。好吧,我已经下载了整个数据库,但它将永远从xml转储中导入所有表。另外考虑一下我只想提取一个国家和城市列表及其信息框这一事实 - 很多转储中的信息对我没用。

    3. 创建我自己的本地表并创建一个cron [我将解释为什么cron job here]脚本会以某种方式解析维基百科上的所有国家和城市页面并将它们转换为我可以在我的表格中使用的格式。但老实说,我不需要信息框中的所有信息,因为我甚至可以得到信息框的基本标记 - 这对我来说已经足够了。像:

    4. 国家名称|信息框原始文本

      如果需要,我可以亲自提取坐标和其他细节等内容。

      我甚至尝试从infochiump和dbpedia下载第三方数据集,但来自infochimps的数据集不完整,并且不包含我想要显示的所有信息 - 再加上dbpedia我完全不知道如何处理csv文件我下载了信息框,我担心它可能也不完整。

      但这只是问题的一部分。我想要一种显示维基百科信息的方法 - 我将所有链接指向维基百科,以及来自维基百科的一个很好的信息显示正确但但问题是我需要一种方法,我可以定期更新我有的信息来自维基百科所以至少我没有完全过时的数据。好吧,让我们说一个可以检查的系统,如果我们有一个新的国家或新的位置,它可以解析信息并以某种方式检索它。我在这里依靠维基百科的国家和城市类别,但坦率地说,所有这些想法都是纸上谈兵,部分编码,而且非常混乱。

      我正在使用PHP和MySQL进行编程,我的截止日期即将到来 - 鉴于上述情况和要求,遵循和实施的最佳和最实用的方法是什么。我完全乐于接受各种想法 - 如果有人做过类似的事,我会很乐意听到:D

4 个答案:

答案 0 :(得分:2)

我能想到的几件事:

  1. 只需在您网站上的iframe中显示维基百科数据。

  2. 使用Curl从维基百科中获取html,然后使用自定义样式表对其进行样式设置和/或隐藏您不想显示的部分。

  3. 尝试实际解析HTML并拉出你想要的部分将是一个巨大的痛苦,并且最有可能必须为每个城市定制。最好让简单的工作变得简单,然后如果你确定需要的话,可以在以后改进它。

答案 1 :(得分:2)

如何使用其中一个Wikipedia Geocoding Webservices

有几种可以传递的地方,例如:邮政编码和国家/地区的简短文章摘要和维基百科文章的链接。

如果那就够了。

答案 2 :(得分:1)

我建议以下

  • 在数据库中创建(城市)时,从维基百科中查询城市
  • 解析数据,使用上次更新的时间戳存储本地副本
  • 访问时,如有必要,更新数据。您可以使用水印显示旧的水印,表示它已经过了几天,现在正在更新。然后在更新完成后更改为新获得的。你已经说过你正在使用AJAX,所以这不会有问题

它会最小化对维基百科的查询,即使无法访问维基百科,您的服务也不会显示空白页面。

答案 3 :(得分:0)

看看DBPedia,它包含了CSV格式的维基百科数据的很好的提取。