Windows运维之wiki中文语料+word2vec (python3.5 windows win7)
小标 2018-09-03 来源 : 阅读 1401 评论 0

摘要:本文主要向大家介绍了Windows运维之wiki中文语料+word2vec (python3.5 windows win7),通过具体的内容向大家展现,希望对大家学习Windows运维有所帮助。

本文主要向大家介绍了Windows运维之wiki中文语料+word2vec (python3.5  windows win7),通过具体的内容向大家展现,希望对大家学习Windows运维有所帮助。

1. 下载wiki中文分词语料   使用迅雷下载会快不少,大小为1个多G

     https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 

2. 安装opencc用于中文的简繁替换

   安装exe的版本

  到https://bintray.com/package/files/byvoid/opencc/OpenCC 中下载

opencc-1.0.1-win64.7z

   

并解压放置到自定义的目录下


   也可安装 python版本的:

    pip install opencc-python

    安装时会报错:

  报错一: ImportError: No module named distribute_setup

   解决方法,到 //www.minitw.com/download/distribute_setup.zip 下载ZIP,解压后将.py文件放置到 电脑的分盘:\你安裝Python的目录\Lib(例如:C:\Python35\Lib)

   报错二:chown() missing 1 required positional argument: 'numeric_owner'

   到distribute_setup.py中,找到self.chown(tarinfo, dirpath),改为chown(tarinfo, dirpath, ''); 

  报错三: import opencc时,报错 no module named 'version'

  将opencc的__init__.py 中的from version import __version__改为from .version import __version__

  

3. 将wiki的资料转为文本txt

    python process_wiki.py zhwiki-latest-pages-articles.xml.bz2 wiki.zh.text

    解压后得到925M的文件,由于wiki中的东西是会定期更新的,所以不同时间下载得到的大小不一样

   

    process_wiki.py 源码如下:

    注: 网上的版本大多是针对python2的,使用python3进行解压会在output.write(space.join(text) + "\n")这一句出现提示关于byte或str的错误,所以需要有如下修改:

space = b' '#原来是space = ' '

...

for text in wiki.get_texts():
   s=space.join(text)
   s=s.decode('utf8') + "\n"
output.write(s)

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# 修改后的代码如下:

import logging

import os.path

import sys

from gensim.corpora importWikiCorpus

if __name__ =='__main__':

program = os.path.basename(sys.argv[0])

logger = logging.getLogger(program)

logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')

logging.root.setLevel(level=logging.INFO)

logger.info("running %s"%' '.join(sys.argv))

# check and process input arguments

if len(sys.argv)<3:

print(globals()['__doc__']% locals())

sys.exit(1)

inp, outp = sys.argv[1:3]

space = b' '

i =0

output = open(outp,'w',encoding='utf-8')

wiki =WikiCorpus(inp, lemmatize=False, dictionary={})

for text in wiki.get_texts():

s=space.join(text)

s=s.decode('utf8')+"\n"

output.write(s)

i = i +1

if(i %10000==0):

logger.info("Saved "+ str(i)+" articles")

output.close()

logger.info("Finished Saved "+ str(i)+" articles")

 


 4. 繁简转化

进入解压后的opencc的目录,打开dos窗口,输入

opencc -i wiki.zh.text -o wiki.zh.jian.text -c t2s.json

则会得到wiki.zh.jian.text,里面是简体的中文

 

此时,大家会比较好奇,里边装着的到底是什么东西~

由于解压后的txt有900多M大,用txt打开比较困难,所以我们采用python自带的IO进行读取

import codecs,sys

import opencc

f=codecs.open('zh.wiki.txt','r',encoding="utf8")

line=f.readline()

print(line)

打印的结果如下,可以看出文档中包含多干行文字,每一行文字为一篇文章,每一个空格表示此处原为一个标点符号

 简体的打印结果如下:


5. 分词

 由第四步得到语料仅由标点隔开,还需将其分割成词

 此处使用结巴分词 pip install jieba 即可安装

 结巴的具体介绍见:https://github.com/fxsjy/jieba 

 结巴分词参考了https://codesky.me/archives/ubuntu-python-jieba-word2vec-wiki-tutol.wind 中的做法

 由于编码的原因,此处使用了codecs

 

import jieba

import jieba.analyse

import jieba.posseg as pseg

import codecs,sys

def cut_words(sentence):

#print sentence

return" ".join(jieba.cut(sentence)).encode('utf-8')

f=codecs.open('zh.jian.wiki.txt','r',encoding="utf8")

target = codecs.open("zh.jian.wiki.seg.txt",'w',encoding="utf8")

print('open files')

line_num=1

line = f.readline()

while line:

print('---- processing ', line_num,' article----------------')

line_seg =" ".join(jieba.cut(line))

target.writelines(line_seg)

line_num = line_num +1

line = f.readline()

f.close()

target.close()

exit()

while line:

curr =[]

for oneline in line:

#print(oneline)

curr.append(oneline)

after_cut = map(cut_words, curr)

target.writelines(after_cut)

print('saved ',line_num,' articles')

exit()

line = f.readline1()

f.close()

target.close()

分词后的文档长这个样子:

6. 训练word2vec模型

python train_word2vec_model.py zh.jian.wiki.seg.txt wiki.zh.text.model wiki.zh.text.vector

train_word2vec_model.py源码如下:

import logging

import os.path

import sys

import multiprocessing

from gensim.corpora importWikiCorpus

from gensim.models importWord2Vec

from gensim.models.word2vec importLineSentence

if __name__ =='__main__':

program = os.path.basename(sys.argv[0])

logger = logging.getLogger(program)

logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')

logging.root.setLevel(level=logging.INFO)

logger.info("running %s"%' '.join(sys.argv))

# check and process input arguments

if len(sys.argv)<4:

print(globals()['__doc__']% locals())

sys.exit(1)

inp, outp1, outp2 = sys.argv[1:4]

model =Word2Vec(LineSentence(inp), size=400, window=5, min_count=5,workers=multiprocessing.cpu_count())

model.save(outp1)

model.save_word2vec_format(outp2, binary=False)

训练时长,看个人的机子配置,我训了一天。。。(吐槽一下换不了的破机子)

最终得到

 

7. 测试训练好的模型

结果如下:

但是呀,这个语句改成这样:

得到的结果却是: 难道这个模型宫斗剧看多了,发现皇上和太后是一家人,低阶的后宫女人是一团,只有皇后是个另类?

剩下的,各位自己去调戏吧,应该乐趣不少~

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维windows频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程