2011-05-30 144 views
2

我打算开发一个基于网络的应用程序,它可以抓取维基百科找到关系并将其存储在数据库中。通过关系,我的意思是寻找一个名字,比如说'比尔盖茨'并找到他的页面,下载它并从页面中提取各种信息并将其存储在数据库中。信息可能包括他的出生日期,他的公司和其他一些事情。但是我需要知道是否有任何方法可以从页面中找到这些独特的数据,以便我可以将它们存储在数据库中。任何特定的书籍或算法将不胜感激。另外提及良好的开源库会很有帮助。挖掘维基百科映射文本挖掘关系

谢谢

+0

查看http://streamhacker.com/和他写的关于如何使用'nltk'这是一个用于文本处理的python库的例子的烹饪书 – 2011-05-30 02:30:57

+3

几乎可以肯定你应该自己做大部分的分析电脑,而不是爬行维基百科。在着手这个项目之前,请看http://en.wikipedia.org/wiki/Wikipedia:Database_download。您可能还想使用维基百科API; http://www.mediawiki.org/wiki/API显示了如何。 – mjec 2011-05-30 02:33:57

+1

注意[数据库转储可用(http://dumps.wikimedia.org/enwiki/20110526/),它们被压缩和_might_更容易比试图刮掉了'birth_date = {{出生日期页面有工作和年龄| mf = yes | 1955 | 10 | 28}}模板。 – sarnold 2011-05-30 02:36:37

回答

6

如果你还没有,你应该看看DBpedia。维基文章的许多类别有“InfoBoxes到”为你描述的各种信息,他们做了一个数据库出来的:

http://en.wikipedia.org/wiki/DBpedia

您也可以利用一些在Metaweb的Freebase的信息(重叠,我相信甚至可能集成来自DBpedia的信息。)他们有一个查询他们的图数据库的API,并且有一个名为freebase-python的Python包装器。

UPDATE: Freebase is no more;他们被谷歌收购并最终被折入Google Knowledge Graph。有an API,但我不认为他们有什么像正式同步Freebase与像维基百科这样的公共资源。我个人对这个看起来如何结果感到失望。 : -/

至于自然语言处理位,如果您确实在这个问题上取得进展,您可以将这些数据库视为您所做的任何信息的存储库。

2

你提到Python和开源的,所以我将调查NLTK(自然语言工具包)。文本挖掘和自然语言处理是你可以用哑算法(例如模式匹配)做很多事情的方法之一,但如果你想更进一步,做更复杂的事情 - 比如说。试图提取以灵活方式存储的信息或尝试查找可能有趣但尚未知道的信息,则应调查自然语言处理。

NLTK用于教学,所以它是一个工具包。这种方法非常适合Python。还有几本书。 O'Reilly的书也在网上公开发布。见NLTK.org

+0

+1要获得真正的多结构化信息维基百科NLP绝对是一个需要作为模板和类别只包含一个位的维基百科包含了所有的信息 – DixonD 2011-05-30 06:47:16

1

Jvc,现有的python模块可以完成上面提到的任何事情。

对于从网页中提取信息,我喜欢使用Selenium,http://seleniumhq.org/projects/ide/。基本上,您可以使用许多标识符(id,Xpath等)在任何网页上本地化和检索信息。然而,就像winwaed说的,如果你只是“模式匹配”,特别是因为一些网站使用动态代码 - 这意味着随着页面的每次重新加载,标识符可能会改变,所以它可能是不灵活的。但是,可以通过向代码添加正则表达式(即(*))来解决此问题。看看这个youtube视频,http://www.youtube.com/watch?v=Ap_DlSrT-iE。尽管他正在使用BeautifulSoup来抓取网站,但您可以看到他是如何使用正则表达式从网页中提取信息的。

此外,我不确定您使用的数据库类型,但pyodbc,http://code.google.com/p/pyodbc/可以使用SQL类型,也可以使用Microsoft Access等主流数据库。

所以,我的建议是看看硒当标识符是动态的寻找信息的网页上,pyodbc存储和检索它,和正则表达式。

+0

该项目的主要目标是找到一种方法,从整体上抽象出来的相关数据页。所以我认为模式匹配是不可能的。我需要使用一些AI吗? – jvc 2011-05-30 04:21:22