由 for text in wiki.get_texts():引发的Python BZ2 IOError: invalid data stream报错!

最近在跑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后缀的未解压文件
  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
def parse_corpus(infile, outfile): '''parse the corpus of the infile into the outfile''' space = ' ' i = 0 def tokenize(text): return [lemma(token) for token in text.split()] with open(outfile, 'w', encoding='utf-8') as fout: # wiki = WikiCorpus(infile, lemmatize=False, dictionary={}) # gensim中的维基百科处理类WikiCorpus wiki = WikiCorpus(infile, tokenizer_func=tokenize, dictionary={}) # gensim中的维基百科处理类WikiCorpus for text in wiki.get_texts(): fout.write(space.join(text) + '\n') i += 1 if i % 10000 == 0: logger.info('Saved ' + str(i) + ' articles') 报错D:\软件\python\lib\site-packages\gensim\utils.py:1333: UserWarning: detected Windows; aliasing chunkize to chunkize_serial warnings.warn("detected %s; aliasing chunkize to chunkize_serial" % entity) Traceback (most recent call last): File "D:\pythonFiles\图灵\Python_project\self_learn\大语言模型\WikiExtractor.py", line 52, in <module> parse_corpus(infile, outfile) File "D:\pythonFiles\图灵\Python_project\self_learn\大语言模型\WikiExtractor.py", line 29, in parse_corpus for text in wiki.get_texts(): File "D:\软件\python\lib\site-packages\gensim\corpora\wikicorpus.py", line 693, in get_texts for tokens, title, pageid in pool.imap(_process_article, group): File "D:\软件\python\lib\multiprocessing\pool.py", line 870, in next raise value File "D:\软件\python\lib\multiprocessing\pool.py", line 537, in _handle_tasks put(task) File "D:\软件\python\lib\multiprocessing\connection.py", line 211, in send self._send_bytes(_ForkingPickler.dumps(obj)) File "D:\软件\python\lib\multiprocessing\reduction.py", line 51, in dumps cls(buf, protocol).dump(obj) AttributeError: Can't pickle local object 'parse_corpus.<locals>.tokenize' 怎么优化
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值