网上看了很多其他博客,发现有些部分都太老旧了,以至于现在套用都错误百出。。。这里总结了一下使用中文维基百科训练word2vec模型的最新方法。

参考链接:
https://blog.csdn.net/vivian_ll/article/details/89914219
https://blog.csdn.net/chichichich/article/details/80783832
https://blog.csdn.net/Pit3369/article/details/95454354
https://blog.csdn.net/luhuibo318/article/details/98487866
https://blog.csdn.net/sinat_29957455/article/details/81290356

一、下载原始数据

数据下载地址:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2
(下载完成后不用解压)

二、抽取正文

WikiExtractor:是意大利人用Python写的一个维基百科抽取器,使用非常方便。用于从原始的xml文件中提取出标题和正文。
地址:https://github.com/attardi/wikiextractor/blob/master/WikiExtractor.py
在本地新建一个脚本,将github上的代码全部复制过来就好了,再将这个WikiExtractor.py文件和原始数据文件放到一个路径下。

在此路径下打开cmd,输入
python WikiExtractor.py -b 500M -o zhwiki zhwiki-latest-pages-articles.xml.bz2

参数-b 500M表示以500M为单位切分文件,默认是1M。
这里,我们得到了3个文本文件:wiki_00, wiki_01,wiki_02。

三、繁简转换

维基百科的中文数据是繁简混杂的,里面包含大陆简体、台湾繁体、港澳繁体等多种不同的数据。有时候在一篇文章的不同段落间也会使用不同的繁简字。为了处理方便起见,我们直接使用了开源项目繁体简体转换工具opencc。
下载地址:https://bintray.com/package/files/byvoid/opencc/OpenCC
百度云下载地址:链接:https://pan.baidu.com/s/10yI1lPRKNOYJ2aSbl4YegA 密码:2kv9
下完直接解压就可以了。
这里建议下载 opencc-1.0.4-win32.7z 这个版本(虽然我电脑是win64)
别问为什么,我也不知道,反正我下了很多其他的版本都运行不成功。。
然后将需要转换的三个文件加入到刚下载的OpenCC的bin目录中,在目录下打开cmd,运行

然后就能得到

四、符号处理

由于Wikipedia Extractor抽取正文时,会将有特殊标记的外文直接剔除。我们需要将「」『』这些符号替换成引号,顺便删除空括号。代码如下:

import re
import sys
import codecs
from imp import reload
def myfun(input_file):p1 = re.compile(r'-\{.*?(zh-hans|zh-cn):([^;]*?)(;.*?)?\}-')p2 = re.compile(r'[(\(][,;。?!\s]*[)\)]')p3 = re.compile(r'[「『]')p4 = re.compile(r'[」』]')outfile = codecs.open('std_zh_wiki', 'a+', 'utf-8')with codecs.open(input_file, 'r', 'utf-8') as myfile:for line in myfile:line = p1.sub(r'\2', line)line = p2.sub(r'', line)line = p3.sub(r'“', line)line = p4.sub(r'”', line)outfile.write(line)outfile.close()
if __name__ == '__main__':if len(sys.argv) != 2:print ("Usage: python script.py inputfile")sys.exit()reload(sys)input_file = sys.argv[1]myfun(input_file)

这个代码我是参考第一个借鉴链接的,但他所用的是python2,我是3,所以有几个注意地方
1)在python2里面,u表示unicode string,类型是unicode, 没有u表示byte string,类型是 str。在python3里面,所有字符串都是unicode string, u前缀没有特殊含义了。所以链接1的这部分代码里所有ur要改为r。
2)Python 3.0 把 reload 内置函数移到了 imp 标准库模块中。它仍然像以前一样重载文件,但是,必须导入它才能使用。所以要加一行 from imp import reload

将这个py文件保存,命名为 exec_sum.py,为了避免出错,所以还是把它放到和之前处理好的数据文件的同一路径下。
在cmd中运行

python .\exec_sum.py zh_wiki_00
python .\exec_sum.py zh_wiki_01
python .\exec_sum.py zh_wiki_02

得到格式化文件:std_zh_wiki

五、中文分词

import jieba
import jieba.analyse# 待分词的文本路径
sourceTxt = 'E:\\downloads\\opencc-1.0.4\\bin\\std_zh_wiki'
# 分好词后的文本路径
targetTxt = 'E:\\downloads\\opencc-1.0.4\\bin\\cut_std_zh_wiki'# 对文本进行操作
with open(sourceTxt, 'r', encoding = 'utf-8') as sourceFile, open(targetTxt, 'a+', encoding = 'utf-8') as targetFile:for line in sourceFile:seg = jieba.cut(line.strip(), cut_all = False)# 分好词之后之间用空格隔断output = ' '.join(seg)targetFile.write(output)targetFile.write('\n')print('写入成功!')

等待了半个多小时后,终于分好了

比原来的文件大一点,因为多了空格
效果是这个样子…分的不是很好,以后再试着改进吧!

六、训练word2vec模型

import logging
from gensim.models import word2vecdef main():logging.basicConfig(format="%(asctime)s:%(levelname)s:%(message)s",level=logging.INFO)sentences = word2vec.LineSentence("cut_std_zh_wiki")      model = word2vec.Word2Vec(sentences,size=300) model.save("wiki_corpus.model")       if __name__ == '__main__':main()

又是 longlonglong time later,终于训练完了,得到

七、调用并测试Word2Vec模型

import gensim
model = gensim.models.Word2Vec.load('wiki_corpus.model')print(model.wv.most_similar('睡觉'))
[('睡', 0.7924377918243408), ('洗澡', 0.7919644713401794), ('吃饭', 0.7749820351600647), ('喝水', 0.7549980878829956), ('就寝', 0.720653772354126), ('喝酒', 0.7139127254486084), ('出门', 0.7127513885498047), ('坐下', 0.7068793773651123), ('躺', 0.6949901580810547), ('入睡', 0.6922317743301392)]print(model.wv.most_similar(['伦敦','中国'],['北京']))
[('英国', 0.6151248216629028), ('欧洲', 0.5450127720832825), ('英格兰', 0.5430649518966675), ('美国', 0.528755784034729), ('苏格兰', 0.5008379220962524), ('澳洲', 0.5004901885986328), ('爱尔兰', 0.490997314453125), ('澳大利亚', 0.486044704914093), ('德国', 0.4796403646469116), ('大英帝国', 0.4759770333766937)]

使用中文维基百科训练word2vec模型的最新方法!相关推荐

  1. 使用中文维基百科训练word2vec模型

    一.下载原始数据 数据下载地址:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 ,或者在这 ...

  2. NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量

    NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量 目录 输出结果 设计思路 1.Wikipedia Text语料来源 2.维基 ...

  3. 利用Gensim训练关于英文维基百科的Word2Vec模型(Training Word2Vec Model on English Wikipedia by Gensim)

    Training Word2Vec Model on English Wikipedia by Gensim 更新:发现另一篇译文:中英文维基百科语料上的Word2Vec实验,该译文还提供了中文维基百 ...

  4. 用维基百科训练word2vec中文词向量

    主要参考: https://blog.csdn.net/weixin_40547993/article/details/97781179 https://www.kaggle.com/jeffd23/ ...

  5. 使用中文维基百科进行Word2Vec实验

    1. 环境及语料 1.1 环境 Homebrew Python jieba分词库 gensim库 1.2 下载维基百科语料 从这个链接下载http://download.wikipedia.com/z ...

  6. 把一个dataset的表放在另一个dataset里面_使用中文维基百科语料库训练一个word2vec模型并使用说明...

    ​本篇主要介绍如何通过中文维基百科语料库来训练一个word2vec模型. 相关资料下载: 中文维基百科下载地址:https://dumps.wikimedia.org/zhwiki/ WikiExtr ...

  7. 使用中文维基百科语料库训练一个word2vec模型

    本篇文章主要介绍如何通过中文维基百科语料库来训练一个word2vec模型. 相关资料下载: 中文维基百科下载地址:https://dumps.wikimedia.org/zhwiki/20180720 ...

  8. 使用中文维基百科语料库训练一个word2vec模型 12.1

    转自:https://blog.csdn.net/sinat_29957455/article/details/81432846 本篇文章主要介绍如何通过中文维基百科语料库来训练一个word2vec模 ...

  9. Word2vec训练中文维基百科

    1.取得中文维基百科数据,本实验用的数据是zhwiki-20180320-pages-articles-multistream.xml.bz2 也可以前往维基百科数据获取下载最新的数据.(请挑选以pa ...

最新文章

  1. python之接口开发
  2. 一步一步写算法(检查表)
  3. 两个vlan之间如何通信_如何桥接两个不同的VLAN?
  4. SAP Spartacus deprecation for 4.0 需要注意的一些事项
  5. 基于Consul的分布式信号量实现
  6. fatal error C1010: unexpected end of file while looking for precompiled head
  7. 使用svn进行本地代码管理
  8. 关于 Apple Metal API 的一些想法
  9. 全面解析腾讯最新开源 loT 操作系统 TencentOS tiny!
  10. python 网络编程模块_Python网络编程之socket模块
  11. Linux 杀死stuck线程,如何中断weblogic中stuck thread
  12. 用WPF实现屏幕文字提示,徐汇区网站设计
  13. java 485通讯_JAVA开发工程师 | 广州市三地信息技术有限公司
  14. 信息安全习题(含答案)
  15. 如何将Adobe Photoshop(PS)完全卸载
  16. eyoucms使用入门 三
  17. 常用时序数据地址 MTGNN
  18. 【论文写作】汽车销售管理系统的设计与开发引言参考
  19. Visual Studio2022快速生成函数说明文档
  20. Python中的逻辑运算符号

热门文章

  1. 北风吹战鼓雷(实验平台的搭建)2
  2. 监理人员是否知道的电源设备安装及设备接地相关知识?
  3. 专升本管理学知识点总结——沟通
  4. freeswitch设置最大呼叫时长
  5. 如何查询拟投期刊是否为EI收录期刊
  6. 基于asp.net的婴幼儿早教管理系统
  7. 关于幅角原理的理解和Nyquist稳定性判据
  8. 执行cmd命令的时候出现:因为在此系统上禁止运行脚本 解决方法
  9. 箕舌线图像怎么画matlab,一种类箕舌线函数的变步长归一化自适应滤波算法
  10. 线程通信中wait和sleep区别