首先感谢无私分享的各位大神,文中很多内容多有借鉴之处。本次将自己的实验过程记录,希望能帮助有需要的同学。
一、从下载数据开始
现在的中文语料库不是特别丰富,我在之前的文章中略有整理,有兴趣的可以看看。本次实验使用wiki公开数据,下载地址如下:
wiki英文数据下载:https://dumps.wikimedia.org/enwiki/latest/enwiki-latest-pages-articles.xml.bz2
wiki中文数据下载:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2
二、英文数据处理
1.抽取文本 wiki数据内容比较复杂,所以在处理之前需要做一些预处理。通过 process_wiki.py 将wiki数据中的每一篇文章转为1行文本。
执行下行命令:
''' process_wiki.py 处理程序 enwiki-latest-pages-articles.xml.bz2 英文wiki数据 wiki.en.text 输出的文本文件 ''' python process_wiki.py enwiki-latest-pages-articles.xml.bz2 wiki.en.text
process_wiki.py
1 #--*-- coding:utf-8 --*-- 2 3 from __future__ import print_function 4 5 import logging 6 import os.path 7 import six 8 import sys 9 10 from gensim.corpora import WikiCorpus 11 #import WikiCorpus 12 13 if __name__ == '__main__': 14 program = os.path.basename(sys.argv[0]) 15 logger = logging.getLogger(program) 16 17 logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s') 18 logging.root.setLevel(level=logging.INFO) 19 logger.info("running %s" % ' '.join(sys.argv)) 20 21 # check and process input arguments 22 if len(sys.argv) != 3: 23 print("Using: python process_wiki.py enwiki.xxx.xml.bz2 wiki.en.text") 24 sys.exit(1) 25 inp, outp = sys.argv[1:3] 26 space = " " 27 i = 0 28 29 output = open(outp, 'w') 30 wiki = WikiCorpus(inp, lemmatize=False, dictionary={}) 31 for text in wiki.get_texts(): 32 if six.PY3: 33 output.write(bytes(' '.join(text), 'utf-8').decode('utf-8') + '\n') 34 # ###another method### 35 # output.write( 36 # space.join(map(lambda x:x.decode("utf-8"), text)) + '\n') 37 else: 38 output.write(space.join(text) + "\n") 39 i = i + 1 40 if (i % 10000 == 0): 41 logger.info("Saved " + str(i) + " articles") 42 43 output.close() 44 logger.info("Finished Saved " + str(i) + " articles")