环境: win7+python3.5

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

2. 安装opencc用于中文的简繁替换
   安装exe的版本
opencc-1.0.1-win64.7z

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

   也可安装 python版本的:
    pip install opencc-python
    安装时会报错:
  报错一: ImportError: No module named distribute_setup
   解决方法,到 http://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的错误,所以需要有如下修改:
  1. space = b' '#原来是space = ' '
  2. ...
  3. for text in wiki.get_texts():
    s=space.join(text)
    s=s.decode('utf8') + "\n"
    output.write(s)
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # 修改后的代码如下:
  4. import logging
  5. import os.path
  6. import sys
  7. from gensim.corpora importWikiCorpus
  8. if __name__ =='__main__':
  9. program = os.path.basename(sys.argv[0])
  10. logger = logging.getLogger(program)
  11. logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
  12. logging.root.setLevel(level=logging.INFO)
  13. logger.info("running %s"%' '.join(sys.argv))
  14. # check and process input arguments
  15. if len(sys.argv)<3:
  16. print(globals()['__doc__']% locals())
  17. sys.exit(1)
  18. inp, outp = sys.argv[1:3]
  19. space = b' '
  20. i =0
  21. output = open(outp,'w',encoding='utf-8')
  22. wiki =WikiCorpus(inp, lemmatize=False, dictionary={})
  23. for text in wiki.get_texts():
  24. s=space.join(text)
  25. s=s.decode('utf8')+"\n"
  26. output.write(s)
  27. i = i +1
  28. if(i %10000==0):
  29. logger.info("Saved "+ str(i)+" articles")
  30. output.close()
  31. 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进行读取
  1. import codecs,sys
  2. import opencc
  3. f=codecs.open('zh.wiki.txt','r',encoding="utf8")
  4. line=f.readline()
  5. print(line)
打印的结果如下,可以看出文档中包含多干行文字,每一行文字为一篇文章,每一个空格表示此处原为一个标点符号
 简体的打印结果如下:
5. 分词
 由第四步得到语料仅由标点隔开,还需将其分割成词
 此处使用结巴分词 pip install jieba 即可安装
 结巴的具体介绍见:https://github.com/fxsjy/jieba 
 由于编码的原因,此处使用了codecs
 
  1. import jieba
  2. import jieba.analyse
  3. import jieba.posseg as pseg
  4. import codecs,sys
  5. def cut_words(sentence):
  6. #print sentence
  7. return" ".join(jieba.cut(sentence)).encode('utf-8')
  8. f=codecs.open('zh.jian.wiki.txt','r',encoding="utf8")
  9. target = codecs.open("zh.jian.wiki.seg.txt",'w',encoding="utf8")
  10. print('open files')
  11. line_num=1
  12. line = f.readline()
  13. while line:
  14. print('---- processing ', line_num,' article----------------')
  15. line_seg =" ".join(jieba.cut(line))
  16. target.writelines(line_seg)
  17. line_num = line_num +1
  18. line = f.readline()
  19. f.close()
  20. target.close()
  21. exit()
  22. while line:
  23. curr =[]
  24. for oneline in line:
  25. #print(oneline)
  26. curr.append(oneline)
  27. after_cut = map(cut_words, curr)
  28. target.writelines(after_cut)
  29. print('saved ',line_num,' articles')
  30. exit()
  31. line = f.readline1()
  32. f.close()
  33. target.close()
分词后的文档长这个样子:
6. 训练word2vec模型
  1. python train_word2vec_model.py zh.jian.wiki.seg.txt wiki.zh.text.model wiki.zh.text.vector
train_word2vec_model.py源码如下:
  1. import logging
  2. import os.path
  3. import sys
  4. import multiprocessing
  5. from gensim.corpora importWikiCorpus
  6. from gensim.models importWord2Vec
  7. from gensim.models.word2vec importLineSentence
  8. if __name__ =='__main__':
  9. program = os.path.basename(sys.argv[0])
  10. logger = logging.getLogger(program)
  11. logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
  12. logging.root.setLevel(level=logging.INFO)
  13. logger.info("running %s"%' '.join(sys.argv))
  14. # check and process input arguments
  15. if len(sys.argv)<4:
  16. print(globals()['__doc__']% locals())
  17. sys.exit(1)
  18. inp, outp1, outp2 = sys.argv[1:4]
  19. model =Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())
  20. model.save(outp1)
  21. model.save_word2vec_format(outp2, binary=False)
训练时长,看个人的机子配置,我训了一天。。。(吐槽一下换不了的破机子)
最终得到
 
7. 测试训练好的模型
结果如下:
但是呀,这个语句改成这样:
得到的结果却是: 难道这个模型宫斗剧看多了,发现皇上和太后是一家人,低阶的后宫女人是一团,只有皇后是个另类?
剩下的,各位自己去调戏吧,应该乐趣不少~
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    
 

wiki中文语料+word2vec (python3.5 windows win7)的更多相关文章

  1. wiki中文语料的word2vec模型构建

    一.利用wiki中文语料进行word2vec模型构建 1)数据获取 到wiki官网下载中文语料,下载完成后会得到命名为zhwiki-latest-pages-articles.xml.bz2的文件,里 ...

  2. word2vec词向量处理中文语料

    word2vec介绍 word2vec官网:https://code.google.com/p/word2vec/ word2vec是google的一个开源工具,能够根据输入的词的集合计算出词与词之间 ...

  3. 基于CBOW网络手动实现面向中文语料的word2vec

    最近在工作之余学习NLP相关的知识,对word2vec的原理进行了研究.在本篇文章中,尝试使用TensorFlow自行构建.训练出一个word2vec模型,以强化学习效果,加深理解. 一.背景知识: ...

  4. 利用RNN进行中文文本分类(数据集是复旦中文语料)

    利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 1.训练词向量 数据预处理参考利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) ,现在我们有了分词 ...

  5. 基于tensorflow的文本分类总结(数据集是复旦中文语料)

    代码已上传到github:https://github.com/taishan1994/tensorflow-text-classification 往期精彩: 利用TfidfVectorizer进行 ...

  6. 利用CNN进行中文文本分类(数据集是复旦中文语料)

    利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 利用RNN进行中文文本分类(数据集是复旦中文语料) 上一节我们利用了RNN(GRU)对中文文本进行了分类,本节我们将继续使用 ...

  7. python3 在 windows 读取路径多了一个\u202a 是咋回

    python3 在 windows 读取路径多了一个\u202a 是咋回事

  8. Python中文语料批量预处理手记

    手记实用系列文章: 1 结巴分词和自然语言处理HanLP处理手记 2 Python中文语料批量预处理手记 3 自然语言处理手记 4 Python中调用自然语言处理工具HanLP手记 5 Python中 ...

  9. windows Win7如何设置多用户同时远程登录

    windows  Win7如何设置多用户同时远程登录 1.创建一个用户 密码永不过期 2.在本地组策略编辑器里面,依次展开计算机配置--->管理模板--->Windows组件---> ...

随机推荐

  1. 邁向IT專家成功之路的三十則鐵律 鐵律十三:IT人理財之道-知足

    身為一位專業的IT人士,工作上不僅要做到滿足興趣與專業熱忱,當然也要做到能夠滿足荷包.現代人賺錢不是問題,但花錢卻出了很大問題,親愛的IT朋友們,請不要將您辛苦賺來的錢花在想要的東西上,實際上需要的卻 ...

  2. linux安装开源邮件服务器iredmail的方法:docker

    直接安装的方法,参考网文,我不介绍.本文介绍的是快速的方法:docker 使用镜像源:https://hub.docker.com/r/lejmr/iredmail/,因为pull的数量最多 直接 d ...

  3. 百度地图之标注一组地理坐标&lt;2&gt;

    一.需求 开发移动地图相关的应用有时会有这种需求:在地图上显示自己的定位,然后想查看周边使用这个应用的有哪些人.当然完毕这个功能须要后台数据的支持.你要把自己的位置信息发给后台,后台在依据你的位置查询 ...

  4. 我的Android进阶之旅------&gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:

    我的Android进阶之旅-->怎样解决Android 5.0中出现的警告: java.lang.IllegalArgumentException: Service Intent must be ...

  5. ios文件系统文件目录操作

    对于一个运行在iPhone得app,它只能访问自己根目录下得一些文件(所谓sandbox). 一个app发布到iPhone上后,目录结构如下: 1.其中获取 app root 可以用 NSHomeDi ...

  6. Python+Selenium框架unittest执行脚本方法之discover()方法

    继续接着介绍,如何利用unittest管理和执行测试用例的问题,这里我们还是利用之前已经有的三条测试用例,如果你跳过了前面文章,请回到框架设计篇的第八篇和第七篇,里面有相关测试类的文件.本文来介绍,如 ...

  7. Nginx学习——进程模型(master 进程)

    进程模型 Nginx分为Single和Master两种进程模型.Single模型即为单进程方式工作,具有较差的容错能力,不适合生产之用.Master模型即为一个master进程+N个worker进程的 ...

  8. maven的坑2

    导入工程后,pom.xml文件中以下插件报错: <plugin> <groupId>com.jayway.maven.plugins.android.generation2&l ...

  9. PHP中的面向对象 中的类(class)

    2.11 上午讲的是面向对象中的类(class),一个非常抽象的概念, 类里面成员的定义有 public$abc; private$abc(私有变量): protect $abc(受保护的变量): 下 ...

  10. hdu 3932 Groundhog Build Home

    Groundhog Build Home Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...