环境说明:本人使用的是MacBook+python3.5
首先,安装NLP工具包gensim,这里直接有word2vec
在终端输入下面指令:
pip install -- upgrade gensim
其次,安装中文分词工具包jieba
在终端输入下面指令:
pip install jieba
1.下载语料库
首先第一步现在搜狗语料库http://www.sogou.com/labs/resource/ca.php下载语料。
我下载的是完整版 tar.gz格式。
2.数据预处理
语料编码问题
刚下载的语料是用GB 18030编码的,在Mac上打不开,需要转换为UTF-8编码格式。(ps:本人小菜鸟,就因为这个问题捣腾了很久)
在Mac上不用安装额外的编码转换器。在终端操作即可。
我没有把全部文章都用上,因为实在太大了,我只尝试使用了100个文档。
编码问题搞好后,虽然文档内容里还有
分词代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 5 19:54:54 2018
@author: tengwei
"""
# word_segment.py用于语料分词
import logging
import os.path
import sys
import re
import jieba
import importlib
importlib.reload(sys)
# 先用正则将
def reTest(content):
reContent = re.sub('
return reContent
if __name__ == '__main__':
# check and process input arguments
#if len(sys.argv) < 3:
#print (globals()['__doc__'] % locals())
#sys.exit(1)
space = " "
i = 0
finput = open('corpus.txt','r')
foutput = open('corpus_seg.txt','w')
for line in finput:
line_seg = jieba.cut(reTest(line))
foutput.write(space.join(line_seg))
i = i + 1
if (i % 1000 == 0):
logger.info("Saved " + str(i) + " articles_seg")
finput.close()
foutput.close()
logger.info("Finished Saved " + str(i) + " articles")
分词效果:
3.训练word2vec
分完词下一步就是训练word2vec的模型。
训练word2vec模型代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Aug 6 18:57:23 2018
@author: tengwei
"""
import gensim.models.word2vec as w2v
model_file_name = 'corpus_model.txt'
#模型训练,生成词向量
sentences = w2v.LineSentence('corpus_seg.txt')
model = w2v.Word2Vec(sentences, size=20, window=5, min_count=5, workers=4)
model.save(model_file_name)
运行结果:
4.测试效果
模型生成后,接下来就是测试了。
测试代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 8 16:01:43 2018
@author: tengwei
"""
import gensim
model = gensim.models.Word2Vec.load('corpus_model.txt')
result = model.most_similar(u'警察')
for word in result:
print (word[0],word[1])
测试结果:
这是一个小实践,但是我弄了快一个星期才把它差不多弄通,希望能和大家多多交流。
QQ:453845334