我正在尝试使用 Python 使用 wikimedia 转储文件 (.xml.bz2) 构建离线维基词典。我开始于this http://users.softlab.ece.ntua.gr/~ttsiod/buildWikipediaOffline.html文章作为指导。它涉及多种语言,我想将所有步骤合并为一个Python项目。我已经找到了该过程所需的几乎所有库。现在唯一的难题是有效地将大型 .xml.bz2 文件分割成多个较小的文件,以便在搜索操作期间更快地进行解析。
我知道 python 中存在 bz2 库,但它只提供压缩和解压缩操作。但我需要一些可以做类似事情的东西bz2recover
从命令行执行,它将大文件分割成许多较小的垃圾文件。
更重要的一点是拆分不应拆分以以下内容开头的页面内容<page>
并结束</page>
在已压缩的xml文档中。
以前是否有一个可用的库可以处理这种情况,或者必须从头开始编写代码?(任何大纲/伪代码都会非常有帮助)。
注意:我想让生成的包跨平台兼容,因此无法使用操作系统特定的命令。
最后我自己写了一个Python脚本:
import os
import bz2
def split_xml(filename):
''' The function gets the filename of wiktionary.xml.bz2 file as input and creates
smallers chunks of it in a the diretory chunks
'''
# Check and create chunk diretory
if not os.path.exists("chunks"):
os.mkdir("chunks")
# Counters
pagecount = 0
filecount = 1
#open chunkfile in write mode
chunkname = lambda filecount: os.path.join("chunks","chunk-"+str(filecount)+".xml.bz2")
chunkfile = bz2.BZ2File(chunkname(filecount), 'w')
# Read line by line
bzfile = bz2.BZ2File(filename)
for line in bzfile:
chunkfile.write(line)
# the </page> determines new wiki page
if '</page>' in line:
pagecount += 1
if pagecount > 1999:
#print chunkname() # For Debugging
chunkfile.close()
pagecount = 0 # RESET pagecount
filecount += 1 # increment filename
chunkfile = bz2.BZ2File(chunkname(filecount), 'w')
try:
chunkfile.close()
except:
print 'Files already close'
if __name__ == '__main__':
# When the script is self run
split_xml('wiki-files/tawiktionary-20110518-pages-articles.xml.bz2')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)