如何批量提取维基百科数据的文章、抽取文本
参考文章
在原文中,是提取单个维基百科数据文章,本文讲解的是如何批量抽取文本
方式1:导入文件,利用WikiCorpus.get_texts()方法,再利用脚本启动文件,读取文件下的所有维基资料
此方法注意把脚本文件放在bz2同级目录下
import logging
import sys
from gensim.corpora import WikiCorpus
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)
if __name__ == '__main__':
if len(sys.argv) < 3:
help()
sys.exit(1)
logging.info("running %s" % ' '.join(sys.argv))
inp, outp = sys.argv[1:3]
i = 0
output = open(outp, 'w', encoding='utf8')
# wiki = WikiCorpus(inp, lemmatize=False, dictionary={})
wiki = WikiCorpus(inp, dictionary={})
for text in wiki.get_texts():
output.write(" ".join(text) + "\n")
i = i + 1
if (i % 10000 == 0):
logging.info("Save " + str(i) + " articles")
output.close()
logging.info("Finished saved " + str(i) + "articles")
脚本启动文件,利用glob读取文件下所有以enwiki* 开头的文件,并且自动生成文本抽取完的图片。
import os
import glob
for index, file_name in enumerate(glob.glob('enwiki*')):
os.system('python wikipro.py {0} enwiki-{1}.txt'.format(file_name, index + 1))
# print(file_name)
方式二:直接读取,将压缩包放在其他文件下,因为数据集太大,一般都存储在其他目录下,故可以使用下面的方法
import logging
from gensim.corpora import WikiCorpus
import os
logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)
if __name__ == '__main__':
#files 为文件路径
files = os.listdir('../dataset')
for filename in files:
inp = filename
outp = '{}.txt'.format(filename)
i = 0
with open(outp, 'w', encoding="utf8") as output:
#filepath为数据集存放的位置,值为路径+文件名
filepath = os.path.join('../dataset',filename)
wiki = WikiCorpus(filepath, dictionary={})
for text in wiki.get_texts():
output.write(" ".join(text) + "\n")
i = i + 1
if (i % 10000 == 0):
logging.info("Save " + str(i) + " articles")
output.close()
logging.info("Finished saved " + str(i) + "articles")
两种方式的运行结果: