使用wiki百科和gensim训练中文词向量

下载wiki百科的数据

那么我是从https://dumps.wikimedia.org/zhwiki/20170520/上下载的1.4G的这个xml版本

抽取数据的内容

使用https://github.com/attardi/wikiextractor这个工具来从解压后的文件中抽取内容。

繁体转简体

抽取的数据中有很多是繁体,参考http://licstar.net/archives/262,使用opencc项目

安装opencc

从https://launchpad.net/ubuntu/artful/amd64/opencc/1.0.4-5下载opencc的deb包,双击安装
使用方式,在terminal中输入:

opencc -i input_file -o output_file -c zht2zhs.ins

下面是我的程序,转换多个文件:

#encoding:utf8
import os
outpath = 'zh-simplify'
outcount = -1
for alpha in ['A','B','C','D','E','F','G','H','I','J','K']:
    print(alpha)
    for i in range(10):
        print(i)
        for j in range(10):
            filename = 'A' + alpha + '/wiki_' + str(i) + str(j)
            if os.path.isfile(filename):
                outcount += 1
                outfilename = '%s/sim_wiki_%d' % (outpath,outcount)
                command = 'opencc -i %s -o %s -c zht2zhs.ini' % (filename,outfilename)
                os.system(command)

训练word2vec

然后开始使用gensim进行训练,中间用到了jieba进行分词,同时参考了http://blog.csdn.net/Star_Bob/article/details/47808499网站对于预料分布在多个文件中的处理方法。
我的代码如下,停用词来自http://blog.csdn.net/shijiebei2009/article/details/39696571和哈工大停用词表:

#encoding:utf8
import gensim,jieba,os
stoplist = {}.fromkeys([ line.strip() for line in open("所有停用词") ])  
class MySentences(object):
    def __init__(self, dirname):
        self.dirname = dirname

    def __iter__(self):
        for fname in os.listdir(self.dirname):
            for line in open(os.path.join(self.dirname, fname)):
                if len(line) > 0:
                    yield [segment for segment in jieba.cut(line.strip(),cut_all=False) if segment not in stoplist]

dirname = 'zh-simplify'

sentences = MySentences(dirname)
model = gensim.models.Word2Vec(sentences=sentences, size=300,min_count=5,workers=7)
model.wv.save_word2vec_format('myWord2Vec',binary=False)

接下来进行漫长的等待。

你可能感兴趣的:(nlp)