使用word2vec对中文维基百科数据进行处理
一.下载中文维基百科数据https://dumps.wikimedia.org/zhwiki/
并使用gensim中的wikicorpus解析提取xml中的内容
二.利用opencc繁体转简体
三.利用jieba对转换后的文本进行分词,去停词
四.利用gensim中的word2vec训练分词后的文本
五.测试
python代码如下:
- #!/user/bin/python
- #coding:utf-8
- __author__ = 'yan.shi'
- from gensim.corpora import WikiCorpus
- import opencc
- import jieba
- import codecs
- from gensim.models import Word2Vec
- from gensim.models.word2vec import LineSentence
- import multiprocessing
- '''
- 读取中文wiki语料库,并解析提取xml中的内容
- '''
- def dataprocess():
- space=b' '
- i=0
- output=open('E:\zhwiki-articles.txt','wb')
- wiki=WikiCorpus('E:\zhwiki-latest-pages-articles.xml.bz2',lemmatize=False,dictionary={})
- for text in wiki.get_texts():
- output.write(space.join(text)+b'\n')
- i=i+1
- if(i%10000==0):
- print('Saved '+str(i)+' articles')
- output.close()
- print('Finished Saved '+str(i)+' articles')
- '''
- 加载停用词表
- '''
- def createstoplist(stoppath):
- print('load stopwords...')
- stoplist=[line.strip() for line in codecs.open(stoppath,'r',encoding='utf-8').readlines()]
- stopwords={}.fromkeys(stoplist)
- return stopwords
- '''
- 过滤英文
- '''
- def isAlpha(word):
- try:
- return word.encode('ascii').isalpha()
- except UnicodeEncodeError:
- return False
- '''
- opencc繁体转简体,jieba中文分词
- '''
- def trans_seg():
- stopwords=createstoplist('E:\stopwords.txt')
- cc=opencc.OpenCC('t2s')
- i=0
- with codecs.open('E:\zhwiki-segment.txt','w','utf-8') as wopen:
- print('开始...')
- with codecs.open('E:\wiki-utf8.txt','r','utf-8') as ropen:
- while True:
- line=ropen.readline().strip()
- i+=1
- print('line '+str(i))
- text=''
- for char in line.split():
- if isAlpha(char):
- continue
- char=cc.convert(char)
- text+=char
- words=jieba.cut(text)
- seg=''
- for word in words:
- if word not in stopwords:
- if len(word)>1 and isAlpha(word)==False: #去掉长度小于1的词和英文
- if word !='\t':
- seg+=word+' '
- wopen.write(seg+'\n')
- print('结束!')
- '''
- 利用gensim中的word2vec训练词向量
- '''
- def word2vec():
- print('Start...')
- rawdata='G:\python workspace\zhwiki-segment.txt'
- modelpath='G:\python workspace\modeldata.model'
- #vectorpath='E:\word2vec\vector'
- model=Word2Vec(LineSentence(rawdata),size=400,window=5,min_count=5,workers=multiprocessing.cpu_count())#参数说明,gensim函数库的Word2Vec的参数说明
- model.save(modelpath)
- #model.wv.save_word2vec_format(vectorpath,binary=False)
- print("Finished!")
- def wordsimilarity():
- model=Word2Vec.load('E:\word2vec\modeldata.model')
- semi=''
- try:
- semi=model.most_similar('日本'.decode('utf-8'),topn=10)#python3以上就不需要decode
- except KeyError:
- print('The word not in vocabulary!')
- #print(model[u'日本'])#打印词向量
- for term in semi:
- print('%s,%s' %(term[0],term[1]))
- if __name__=='__main__':
- #dataprocess()
- #trans_seg()
- #word2vec()
- wordsimilarity()
日本的相关词:
使用word2vec对中文维基百科数据进行处理的更多相关文章
- Windows下基于python3使用word2vec训练中文维基百科语料(二)
在上一篇对中文维基百科语料处理将其转换成.txt的文本文档的基础上,我们要将为文本转换成向量,首先都要对文本进行预处理 步骤四:由于得到的中文维基百科中有许多繁体字,所以我们现在就是将繁体字转换成简体 ...
- Windows下基于python3使用word2vec训练中文维基百科语料(一)
在进行自然语言处理之前,首先需要一个语料,这里选择维基百科中文语料,由于维基百科是 .xml.bz2文件,所以要将其转换成.txt文件,下面就是相关步骤: 步骤一:下载维基百科中文语料 https:/ ...
- Windows下基于python3使用word2vec训练中文维基百科语料(三)
对前两篇获取到的词向量模型进行使用: 代码如下: import gensim model = gensim.models.Word2Vec.load('wiki.zh.text.model') fla ...
- 中文维基百科分类提取(jwpl)--构建知识图谱数据获取
首先感谢 : 1.https://blog.csdn.net/qq_39023569/article/details/88556301 2.https://www.cnblogs.com/Cheris ...
- 使用JWPL (Java Wikipedia Library)操作维基百科数据
使用JWPL (Java Wikipedia Library)操作维基百科数据 1. JWPL介绍 JWPL(Java Wikipedia Library)是一个开源的访问wikipeida数据的Ja ...
- 110G离线维基百科数据免费拿
110G离线维基百科数据免费拿.. 资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994
- 中英文维基百科语料上的Word2Vec实验
最近试了一下Word2Vec, GloVe 以及对应的python版本 gensim word2vec 和 python-glove,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料进入了 ...
- JWPL工具处理维基百科wikipedia数据用于NLP
JWPL处理维基百科数据用于NLP 处理zhwiki JWPL是一个Wikipedia处理工具,主要功能是将Wikipedia dump的文件经过处理.优化导入mysql数据库,用于NLP过程.以下以 ...
- 搜索和浏览离线 Wikipedia 维基百科(中/英)数据工具
为什么使用离线维基百科?一是因为最近英文维基百科被封,无法访问:二是不受网络限制,使用方便,缺点是不能及时更新,可能会有不影响阅读的乱码. 目前,主要有两种工具用来搜索和浏览离线维基百科数据:Kiwi ...
随机推荐
- Shell脚本编程(一)
shell 脚本编程(一) 1 . shell 的作用 Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一 ...
- C++多线程基础学习笔记(一)
下面分三个方面多线程技术的必须掌握一些基本知识. 1.进程 2.线程 3.并发 (1)进程 一个可执行程序运行起来了,即为创建了一个进程.如在电脑上打开了word,就创建了一个word进程,打开QQ, ...
- C++练习 | 不使用头插法逆转单链表
void D(PBook pHead) { PBook p,q,s; p=pHead->next->next; q=p->next; s=q->next; pHead-> ...
- Memcached安装 常用指令
Memcached 源码安装 # 安装依赖yum install -y gcc gcc-c++ automake autoconf make cmake libevent-devel.x86_64# ...
- stm32F429启动时钟配置
STM32f429在启动时会在startup_stm32f429_439xx.s中调用static void SetSysClock(void)函数.默认使用的是25M晶振,把系统时钟设置为180M. ...
- Ansible 系统概述与部署
Ansible 系统概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet但是有一个不同和优点是我们不需要在节点中安装 ...
- 关于echarts中南海诸岛的显示问题
1.china.js 文件中 echarts.registerMap('china', //名字要是'china',不能写成'中国' 2.echarts 配置中地图名称 mapName: ...
- spring boot本地开发与docker容器化部署的差异
spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...
- JavaScript的数组方法(array)
数组方法: 1. concat() 合并数组 2. join() 将数组的元素拼接成字符串,并指定分隔符 3. push() 往数组末尾添加一个元素,并返回新的数组的长度 4. reverse( ...
- python词云生成-wordcloud库
python词云生成-wordcloud库 全文转载于'https://www.cnblogs.com/nickchen121/p/11208274.html#autoid-0-0-0' 一.word ...