从维基百科挖掘文本挖掘的关系映射

2 投票
3 回答
3163 浏览
提问于 2025-04-16 18:35

我打算开发一个基于网页的应用程序,这个程序可以爬取维基百科,寻找一些关系并把它们存储到数据库里。这里的“关系”指的是,比如说我想查找一个名字,比如“比尔·盖茨”,然后找到他的页面,下载这个页面,从中提取出各种信息并存储到数据库里。这些信息可能包括他的出生日期、他的公司以及其他一些内容。不过,我需要知道有没有什么方法可以从页面中找到这些独特的数据,这样我才能把它们存储到数据库里。如果能推荐一些具体的书籍或算法,那就太好了。另外,提到一些好的开源库也会很有帮助。

谢谢!

3 个回答

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来存储和提取这些信息,当标识符是动态的时候,可以使用正则表达式。

2

你提到了Python和开源,所以我建议你看看NLTK(自然语言工具包)。文本挖掘和自然语言处理是可以用一些简单的算法来完成的,比如模式匹配。但如果你想更进一步,做一些更复杂的事情,比如提取以灵活方式存储的信息,或者寻找一些你不知道但可能有趣的信息,那么就应该研究一下自然语言处理。

NLTK是为了教学而设计的,所以它是一个工具包。这种方法非常适合Python。关于NLTK还有几本书可以参考,其中O'Reilly出版的书也可以在网上找到,且是开放许可的。你可以去NLTK.org看看。

6

如果你还没看过DBpedia,建议你去了解一下。很多维基百科的文章都有“信息框”,里面包含了你提到的各种信息,他们把这些信息整理成了一个数据库:

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

你还可以利用Metaweb的Freebase中的一些信息(这两个地方的信息有重叠,我觉得它们可能还整合了DBpedia的信息)。他们有一个API,可以用来查询他们的图形数据库,还有一个叫freebase-python的Python库可以使用。

更新:Freebase已经不再使用了;他们被谷歌收购,最后合并到了谷歌知识图谱中。现在有一个API,但我觉得他们没有像Freebase那样与维基百科等公共资源进行正式同步。我个人对这个结果感到失望。 :-/

至于自然语言处理方面,如果你在这个问题上有进展,可以考虑把这些数据库作为你挖掘到的信息的存储库。

撰写回答