最近在跑wiki中文语料库的词向量训练,第一步就是把xml类型的文档转化为txt类型的文档。
看了别人的代码,好多人直接用了gensim的WikiCorpus,原始代码如下:
# coding; utf-8
from gensim.corpora import WikiCorpus
if __name__ == '__main__':
print('主程序开始...')
input_file_name = 'zhwiki-20191120-pages-articles-multistream.xml'
output_file_name = 'wiki.cn.txt'
print('开始读入wiki数据...')
output_file = open(output_file_name, 'w', encoding="utf-8")
input_file = WikiCorpus(input_file_name, lemmatize=False, dictionary={})
print('wiki数据读入完成!')
print('处理程序开始...')
count = 0
for texts in input_file.get_texts():
output_file.write(b' '.join(texts).decode('utf-8') + '\n')
count = count + 1
if count % 10000 == 0:
print('目前已处理%d条数据' % count)
print('处理程序结束!')
# output_file.close()
print('主程序结束!')
结果就出现了令人百思不得其解的一串报错??最后:
OSError: Invalid data stream
traceback从这里开始:
Traceback (most recent call last):
File "C:/PycharmProjects/zhwiki/xml2txt.py", line 23, in <module>
for texts in input_file.get_texts():
查了好几个小时,最后终于在WikiCorpus.py(Ctrl+右键+点击函数名)中找到了一点线索:
wikicorpus类:
get_texts()函数:
注意下图红线处!!!!!!BZ2File!!!!!!!
所以这里的input file是那个我们下载的时候,没有解压的那个!!!!!
终于搞明白了,改成下面的之后,再运行就没有再报这个错了(不过还有别的错。。)
input_file_name = 'zhwiki-20191120-pages-articles-multistream.xml.bz2'#输入文件应是.bz2后缀的未解压文件