本篇主要介绍如何通过中文维基百科语料库来训练一个word2vec模型。
相关资料下载:
一、语料库的下载
我下载是20190401文件,1.5G左右是一个压缩包,下载的时候需要注意文件的名称。
二、语料库文章的提取
下载完成之后,解压缩得到的是一个xml文件,里面包含了许多的文章,也有许多的日志信息。所以,我们只需要提取xml文件里面的文章就可以了。我们通过WikiExtractor来提取xml文件中的文章,它是一个意大利人写的一个Python脚本专门用来提取维基百科语料库中的文章,将每个文件分割的大小为500M,它是一个通过cmd命令来设置一些参数提取文章,提取步骤如下:
a、WikiExtractor的安装
将整个WikiExtractor项目clone或者下载到本地,打开cmd窗口,
python WikiExtractor.py -b 500M -o zhwiki zhwiki-20190401-pages-articles-multistream.xml.bz2
使用WikiExtractor提取文章,会在指定目录下产生一个AA的文件夹,里面会包含很多的文件。
c、中文简体和繁体的转换
因为维基百科语料库中的文章内容里面的简体和繁体是混乱的,所以我们需要将所有的繁体字转换成为简体。这里我们利用OpenCC来进行转换。
OpenCC的使用教程请参考下篇:OpenCC中文简体和繁体互转
d、正则表达式提取文章内容并进行分词
使用WikiExtractor提取的文章,会包含许多的,所以我们需要将这些不相关的内容通过正则表达式来去除。然后再通过jieba对文章进行分词,在分词的时候还需要将一些没有实际意义的词进行去除,所以在分词的之后加了一个停用词的去除。将分割之后的文章保存到文件中,每一行表示一篇文章,每个词之间使用空格进行分隔。
import logging,jieba,os,re
def get_stopwords():
logging.basicConfig(format='%(asctime)s:%(levelname)s:%(message)s',level=logging.INFO)
#加载停用词表
stopword_set = set()
with open("../stop_words/stopwords.txt",'r',encoding="utf-8") as stopwords:
for stopword in stopwords:
stopword_set.add(stopword.strip("\n"))
return stopword_set
'''
使用正则表达式解析文本
'''
def parse_zhwiki(read_file_path,save_file_path):
#过滤掉
regex_str = "[^$]|[^$]"
file = open(read_file_path,"r",encoding="utf-8")
#写文件
output = open(save_file_path,"w+",encoding="utf-8")
content_line = file.readline()
#获取停用词表
stopwords = get_stopwords()
#定义一个字符串变量,表示一篇文章的分词结果
article_contents = "