2

我计划开发一个基于 Web 的应用程序,它可以爬取维基百科以查找关系并将其存储在数据库中。通过关系,我的意思是搜索一个名字,比如“比尔盖茨”并找到他的页面,下载它并从页面中提取各种信息并将其存储在数据库中。信息可能包括他的出生日期、他的公司和其他一些信息。但我需要知道是否有任何方法可以从页面中找到这些唯一数据,以便我可以将它们存储在数据库中。任何特定的书籍或算法将不胜感激。还提到好的开源库会有所帮助。

谢谢你

4

3 回答 3

6

如果你还没有,你应该看看 DBpedia。许多类别的 wiki 文章都有用于您描述的信息种类的“信息框”,并且他们已经从中建立了一个数据库:

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

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

更新: Freebase 已不复存在;它们被谷歌收购,最终并入谷歌知识图谱。有一个 API,但我认为它们没有像 Freebase 与 Wikipedia 等公共资源的正式同步。我个人对这看起来的结果感到失望。:-/

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

于 2011-05-30T02:59:56.197 回答
2

你提到了 Python 和开源,所以我会研究 NLTK(自然语言工具包)。文本挖掘和自然语言处理是您可以使用愚蠢的算法(例如模式匹配)做很多事情的事情之一,但是如果您想更进一步并做一些更复杂的事情 - 即。尝试提取以灵活方式存储的信息或尝试找到可能有趣但先验未知的信息,则应研究自然语言处理。

NLTK 旨在用于教学,因此它是一个工具包。这种方法非常适合 Python。也有几本书。O'Reilly 的书也以开放许可形式在线出版。参见 NLTK.org

于 2011-05-30T02:30:46.307 回答
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 等主流数据库。

因此,我的建议是查看 Selenium 以查找网页上的信息,使用 pyodbc 存储和检索它,以及当标识符是动态的时使用正则表达式。

于 2011-05-30T03:03:54.553 回答