GENSIM 使用笔记1 --- 语料和向量空间
2016-12-25 15:35
309 查看
GENSIM 使用笔记1 — 语料和向量空间
GENSIM 使用笔记2 — 主题模型和相似性查询
首先我们看一下我们的基本文档形式:
和原始教程不一样,这里我不完全参考他的文档,并且换用了中文作为示例,这一点更加贴合我们实际的使用。
在这里,我们简单的表示了下,将每篇文档(这里只是一句话,请根据实际情况替换)表示为了一个字符串,最后用一个list表示所有的文档,也就是我们的语料库了。
随后,我们需要将他进行分词,在这里我是用了jieba中文分词,如果有其他的大家可以自行替换,如果有什么特殊的功能(如停用词等)也可以自行参照修改。
此时,需要进行了词典的构建,如果需要查看具体的对照信息,也可以print下。具体的方式如下:
那么现在我可以引入一些新的文本,并且通过他生成对应的向量(注意这里保证你的词,已经出现过在之前的语料库之中了,否则多出的这些词是不会统计的)
使用doc2bow这个功能,只会简单的做一些类似于wordcount的东西,并且返回的是一些元组,就是(词的id,频次)的一个数组,这里需要特别注意下。
最后,我们通过之前的字典和预料,生成一个符合我们格式的语料库
当我们训练好了一个词典以后,一般希望将其记录到磁盘当中,方便后续使用,而不是每次都单独训练,gensim提供了多种序列化方式,在这里我只选择其中一种进行说明:
如上,就将语料库序列化和反序列化了
GENSIM 使用笔记2 — 主题模型和相似性查询
1 本篇说明
本篇博客来源于GENSIM官方向导文档的第一章,主要供自己后续的翻阅,并通过分享带给诸位网友一个小小的参照。从字符串到向量
在这一小节当中,将会讲述如何通过gensim,将一段文本以向量的形式表示。首先我们看一下我们的基本文档形式:
documents = [ '拍照反光一直是摄影爱好者较为苦恼的问题', '尤其是手机这种快速拍照设备的成像效果总是难以令人满意', '特别是抓拍的珍贵照片', '遇上反光照片基本作废', '而索尼最近研发的集成偏振片传感器', '似乎可以有效的解决拍照反光的问题' ]
和原始教程不一样,这里我不完全参考他的文档,并且换用了中文作为示例,这一点更加贴合我们实际的使用。
在这里,我们简单的表示了下,将每篇文档(这里只是一句话,请根据实际情况替换)表示为了一个字符串,最后用一个list表示所有的文档,也就是我们的语料库了。
随后,我们需要将他进行分词,在这里我是用了jieba中文分词,如果有其他的大家可以自行替换,如果有什么特殊的功能(如停用词等)也可以自行参照修改。
texts = [jieba.lcut(document) for document in documents ]
此时,需要进行了词典的构建,如果需要查看具体的对照信息,也可以print下。具体的方式如下:
#构造字典 并 保存和加载 dictionary = corpora.Dictionary(texts) dictionary.save('mydict.dic') print 'Tokens:Id' print dictionary.token2id new_dictionary = corpora.Dictionary.load('mydict.dic') print(new_dictionary)
那么现在我可以引入一些新的文本,并且通过他生成对应的向量(注意这里保证你的词,已经出现过在之前的语料库之中了,否则多出的这些词是不会统计的)
#构造新的文本并且获得他的向量 new_document = "索尼可以有效解决拍照的问题" new_vector = dictionary.doc2bow(jieba.lcut(new_document)) print 'the vector of "%s": (tokenid,frequency)' % new_document print new_vector
使用doc2bow这个功能,只会简单的做一些类似于wordcount的东西,并且返回的是一些元组,就是(词的id,频次)的一个数组,这里需要特别注意下。
最后,我们通过之前的字典和预料,生成一个符合我们格式的语料库
#生成语料库 corpus = [ dictionary.doc2bow(text) for text in texts]
当我们训练好了一个词典以后,一般希望将其记录到磁盘当中,方便后续使用,而不是每次都单独训练,gensim提供了多种序列化方式,在这里我只选择其中一种进行说明:
#序列化 corpora.MmCorpus.serialize('corpus.mm', corpus) #重新加载预料 new_corpus = corpora.MmCorpus('corpus.mm') print(len(new_corpus))
如上,就将语料库序列化和反序列化了
其他
原教程,还有一大块是关于如何对接numpy 以及如何节约内存的,这里就不多说了,有需要的自行研究完整代码
#coding:utf-8
import gensim
import jieba
from gensim import corpora
documents = [ '拍照反光一直是摄影爱好者较为苦恼的问题', '尤其是手机这种快速拍照设备的成像效果总是难以令人满意', '特别是抓拍的珍贵照片', '遇上反光照片基本作废', '而索尼最近研发的集成偏振片传感器', '似乎可以有效的解决拍照反光的问题' ]texts = [jieba.lcut(document) for document in documents]
#构造字典 并 保存和加载 dictionary = corpora.Dictionary(texts) dictionary.save('mydict.dic') print 'Tokens:Id' print dictionary.token2id new_dictionary = corpora.Dictionary.load('mydict.dic') print(new_dictionary)
#构造新的文本并且获得他的向量
new_document = "索尼可以有效解决拍照的问题,佳能就不可以"
new_vector = dictionary.doc2bow(jieba.lcut(new_document))
print 'the vector of "%s": (tokenid,frequency)' % new_document
print new_vector
#生成语料库 corpus = [ dictionary.doc2bow(text) for text in texts]
#序列化 corpora.MmCorpus.serialize('corpus.mm', corpus) #重新加载预料 new_corpus = corpora.MmCorpus('corpus.mm') print(len(new_corpus))
Reference
http://radimrehurek.com/gensim/tut1.html相关文章推荐
- 【python gensim使用】word2vec词向量处理中文语料
- NLP02-Gensim语料与向量空间
- 【python gensim使用】word2vec词向量处理英文语料
- 【python gensim使用】word2vec词向量处理中文语料
- 【python gensim使用】word2vec词向量处理英文语料
- 【Java学习笔记】向量类的使用
- Android使用笔记--存储空间管理
- word2vec词向量训练及gensim的使用
- Java6学习笔记32——Java6中向量类的使用
- 蓝以中老师《高等代数》第02章:向量空间与矩阵,笔记
- jquery 上传空间uploadify使用笔记
- 线性代数笔记(1):向量空间与子空间
- Opencv学习笔记(三):图像的使用与操作_颜色空间的变换
- 树莓派B+新手学习笔记---【使用SD卡剩余空间】
- jquery 上传空间uploadify使用笔记
- Eclipse IDE 使用技巧 (Eclipse工作空间小技巧)(自己的一些学习笔记和心得,记录下来,备忘录和复习使用)
- 信息检索导论学习笔记(6)-文档评分,词项权重计算及向量空间模型
- jquery 上传空间uploadify使用笔记
- 【Java学习笔记】向量类的使用
- python 环境下gensim中的word2vec的使用笔记