wiki中文语料+word2vec (python3.5 windows win7),word2vecwin7,环境: win7+p
wiki中文语料+word2vec (python3.5 windows win7),word2vecwin7,环境: win7+p
环境: win7+python3.51. 下载wiki中文分词语料 使用迅雷下载会快不少,大小为1个多G https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz22. 安装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 解决方法,到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 pythonprocess_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 loggingimport os.pathimport sysfrom gensim.corpora import WikiCorpusif __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,sysimport openccf=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 jiebaimport jieba.analyseimport jieba.posseg as psegimport codecs,sysdef 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=1line = 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 loggingimport os.pathimport sysimport multiprocessingfrom gensim.corpora import WikiCorpusfrom gensim.models import Word2Vecfrom gensim.models.word2vec import LineSentenceif __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. 测试训练好的模型结果如下:
但是呀,这个语句改成这样:
得到的结果却是:难道这个模型宫斗剧看多了,发现皇上和太后是一家人,低阶的后宫女人是一团,只有皇后是个另类?剩下的,各位自己去调戏吧,应该乐趣不少~
来自为知笔记(Wiz)
wiki中文语料+word2vec (python3.5 windows win7)
相关内容
- Python之CVXOPT模块,pythoncvxopt,??Python中支
- python基础二,python基础,#让程序暂停, 等待
- python-继承,, 1 class A
- 使用python获取股票指定日期交易代码数据,python股票
- python-字典练习,python-字典,备注:此次练习使用3
- Python使用zip合并相邻列表项的方法示例,python列表项
- python2与python3的print及字符串格式化小结,python2python3
- 解决vscode python print 输出窗口中文乱码的问题,vscodep
- python如何压缩新文件到已有ZIP文件,python压缩已有zip
- Python zip()函数用法实例分析,python实例分析
评论关闭