在python中抓取所有维基百科页面中的短语

时间:2012-04-06 04:26:45

标签: python nlp wikipedia

我需要设计一个程序,在整个维基百科文章集中找到一些四或五个单词短语(是的,我知道它的页面很多,而且我不需要回答我这样做是个白痴)。

我之前没有编写过这样的东西,所以有两个问题我会非常感谢一些帮助:

  • 首先,我将如何让程序抓取所有页面(即不对每百万页中的每一页进行硬编码。我已将所有文章下载到我的硬盘上,但我'我不知道如何告诉程序迭代文件夹中的每一个) 编辑 - 我的硬盘上有所有维基百科文章

  • 页面的快照中包含图片和表格。我如何仅提取文章的正文?

非常感谢您对这两个问题的帮助!

4 个答案:

答案 0 :(得分:6)

您应该下载official datadump,而不是手动抓取,速度较慢且可以阻止的页面。这些不包含图像,所以第二个问题也解决了。

编辑:我看到你的计算机上有所有文章,所以这个答案可能没多大帮助。

答案 1 :(得分:2)

  

页面的快照中包含图片和表格。怎么会   我只提取了文章的正文?

如果您可以在表格中找到短语,可以尝试直接使用regular expressions,但更好的选择是使用解析器并删除所有标记。您可以使用Beautiful Soup执行此操作(您还需要lxml):

from bs4 import BeautifulSoup
# produces an iterable generator that returns the text of each tag in turn
gen = BeautifulSoup(markup_from_file, 'xml').stripped_strings
list_of_strings = [x for x in gen] # list comprehension generates list
' '.join(list_of_strings)

BeautifulSoup生成unicode文本,因此如果您需要更改编码,您可以这样做:

list_of_strings = map(lambda x: x.encode('utf-8'),list_of_strings)

另外,Beautiful Soup可以帮助您更好地浏览和选择每个文档。如果你知道数据转储的编码,那肯定会有助于它更快。作者还说它在Python 3上运行得更快。

答案 2 :(得分:0)

要点1:Python有一个模块,仅用于递归迭代路径os.walk的每个文件或目录。

第2点:您在这里要问的是如何区分图像文件和文本文件。奶酪商店提供的magic模块为同名的标准unix实用程序提供python绑定(通常调用为file(1)

答案 3 :(得分:0)

你问:

  

我已将所有文章下载到我的硬盘上,但我不是   确定我如何告诉程序迭代每个程序   夹

假设所有文件都在目录树结构中,您可以使用os.walklink到Python文档和示例)访问每个文件,然后使用{s}搜索每个文件中的短语类似的东西:

for line in open("filename"):
    if "search_string" in line:
        print line

当然,这个解决方案不会出现在“Python Perf”杂志的封面上,但我是Python的新手,所以我会拉n00b卡。使用Python的预烘焙模块可能有更好的方法在文件中进行grep。