本文将展示gensim的一些用法。python环境:Anaconda3(Python3.7)

使用gensim做自然语言处理的一般思路是:使用(处理)字典 ----> 生成(处理)语料库 ----> 自然语言处理(tf-idf的计算等)

利用列表生成字典(dict):

#导入模块
from gensim import corpora
from pprint import pprint #格式化输出#三个存放分好词的文本列表
word_list1 = ['我','来自','中国','我']
word_list2 = ['我们','来自','火星']
word_list3 = ['你','来自','何方']#利用list1和list2生成一个词典
dict = corpora.Dictionary([word_list1,word_list2])
print('由list1和list2生成的词典:')
print(dict)
dict.add_documents([word_list3])
print('由list3拓展生成的词典:')
print(dict)dict.save('test.dict') #保存字典
dict = corpora.Dictionary.load('test.dict') #加载字典

需要注意的是,corpora.Dictionary()方法,括号里面的对象的形式是这样的:[ [list1] , [list2] ]。

以上代码的运行结果如下:

由list1和list2生成的词典:
Dictionary(5 unique tokens: ['中国', '我', '来自', '我们', '火星'])
由list3拓展生成的词典:
Dictionary(7 unique tokens: ['中国', '我', '来自', '我们', '火星']...)

表明已经生成了字典对象。接下来,通过一些方法来查看字典对象的一些属性:

dict.dfs 返回字典:{ 单词id:在多少文档中出现 }
dict.num_docs 返回文档数目
dict.num_pos 返回词的总数(不去重)
dict.token2id 返回字典:{ 单词:id }
dict.id2token 返回字典:{ id: 单词 } 
dict.items() 返回对象:[(id,词)],查看需要循环

token:百度的意思是标记,但实际情况是表示字典中的词;id:则是每一个词在字典中独一无二的编号。(词袋中的索引值)

下面用代码来演示以下dict的属性。

print ('dfs:', dict.dfs)  # 字典词频,{单词id,在多少文档中出现}
print ('num_docs:', dict.num_docs)  # 文档数目
print ('num_pos:', dict.num_pos ) # 所有词的个数(不去重)
word_id_dict = dict.token2id  # 生成{词:id}这样一个字典
id_word_dict = dict.id2token  # 生成{id:词}这样一个字典
print('word_id_dict:',word_id_dict)
print('id_word_dict:',id_word_dict)id_word_list = dictionary.items()
print ('id_word_dict:',id_word_list)
for itm in id_word_list:print (itm[0], itm[1])

运行结果如下:

dfs: {1: 1, 2: 3, 0: 1, 3: 1, 4: 1, 6: 1, 5: 1}
num_docs: 3
num_pos: 10
word_id_dict: {'中国': 0, '我': 1, '来自': 2, '我们': 3, '火星': 4, '何方': 5, '你': 6}
id_word_dict: {} #这里本应是与上一行相反的结果,未找出原因,后面更正
#理论上结果为:
#id_word_dict: { 0 :'中国', 1 :'我', 2 :'来自', 3 :'我们', 4 :'火星', 5 :'何方', 6:'你' }
id_word_dict: ItemsView(<gensim.corpora.dictionary.Dictionary object at 0x00000177B6D0FE48>)
0 中国
1 我
2 来自
3 我们
4 火星
5 何方
6 你

得到一个字典后,如果想要进行过滤(或者说去除处理),那么可以使用以下方法:

print(dictionary) #未过滤前的字典
dictionary.filter_n_most_frequent(1) #过滤掉出现频率最高的1个单词(参数决定)
print(dictionary) #过滤后的字典#运行结果:少了‘来自’这个词
Dictionary(7 unique tokens: ['中国', '我', '来自', '我们', '火星']...)
Dictionary(6 unique tokens: ['中国', '我', '我们', '火星', '何方']...)

过滤词汇还可以使用 :dict.filter_extremes()

它有四个参数:no_below, no_above, keep_n, keep_tokens。遵循以下原则:

  1. 去掉少于在no_below篇文档中出现的词,比如说‘火星’这个词只在一篇文档中出现,你想要去掉它,那么no_below=2便可以实现,其他只在一篇文档出现的也会去除。
  2. 去掉高于no_above*num_docs篇文档中出现的词,no_above理解为总文档数的百分数,比如你想去掉一半以上文档出现的词,那么no_above应当取0.5(这个数字一定是小于1的,多于1会怎样,我也不确定)。
  3. 在1和2的基础上,保留出现频率前keep_n的单词;
  4. keep_tokens:强制保留的词,即无视以上规则,保留下来的词。

下面用代码来演示一下:

#以下是我们的字典及其在文档出现的文档数
#{'中国': 1, '我': 1, '来自': 3, '我们': 1, '火星': 1, '何方': 1, '你': 1}
print(dict)
dict.filter_extremes(no_below=2, no_above=0.5, keep_n=1000, keep_tokens=['中国','我'])
#no_below:不要少于多少文档;no_above:不要超过多少(百分数)文档
#keep_n:受前面约束保留的前几个词;keep_tokens:不受约束保留的具体的词print(dict)#运行结果
Dictionary(7 unique tokens: ['中国', '我', '来自', '我们', '火星']...)
Dictionary(2 unique tokens: ['中国', '我'])

以上代码去除的是:只在一篇文档出现的,多于一半文档出现的。理论上所有的会过滤掉。但是我们保留了'中国','我'两个词,最终结果也只剩下这两个。

接下来的步骤进行语料库的处理:

word_bow1 = dictionary.doc2bow(word_list1, allow_update=False)  #词袋[(id,num)],稀疏向量
word_bow2 = dictionary.doc2bow(word_list2) #将词列表转换成稀疏词袋向量
word_bow3 = dictionary.doc2bow(word_list3) #将词列表转换成稀疏词袋向量
print ('word_bow1:', word_bow1)
print ('word_bow2:', word_bow2)
print ('word_bow3:', word_bow3)
corpus = [word_bow1, word_bow2, word_bow3] #由词袋向量组成的列表构成语料
print(corpus)#运行结果
word_bow1: [(0, 1), (1, 2), (2, 1)]
word_bow2: [(2, 1), (3, 1), (4, 1)]
word_bow3: [(2, 1), (5, 1), (6, 1)]
[[(0, 1), (1, 2), (2, 1)], [(2, 1), (3, 1), (4, 1)], [(2, 1), (5, 1), (6, 1)]]

词袋形象地解释便是:将文本中的词放入一个袋子里,在袋子中,词拥有两个属性编号和数目(id,num)。一个词袋对应一篇文档。由元组(id,num)构成的 [(0, 1), (1, 2), (2, 1)] 则称作稀疏向量。一般语料库都是用这种方式来表示(gensim中)。

接下来,便是使用模型来计算tf-idf:

from gensim import models#根据语料库和字典生成模型
tfidf_model = models.TfidfModel(corpus=corpus, dictionary=dict)
tfidf_model.save('test_tfidf.model') #保存模型到本地
tfidf_model = models.TfidfModel.load('test_tfidf.model') #载入模型
corpus_tfidf = [tfidf_model[doc] for doc in corpus]
print ('TF-IDF:')
for tfidf in corpus_tfidf:print (tfidf)#运行结果
TF-IDF:
[(0, 0.4472135954999579), (1, 0.8944271909999159)]
[(3, 0.7071067811865475), (4, 0.7071067811865475)]
[(5, 0.7071067811865475), (6, 0.7071067811865475)]

以上便是gensim库的简单使用,具体情况再具体分析。

【python】gensim corpora的简单使用相关推荐

  1. gensim corpora的简单使用

    作者:Yolen_Chan  来源:CSDN  原文:https://blog.csdn.net/Yolen_Chan/article/details/84934928 --------------- ...

  2. 【NLP】文档集数据处理 gensim corpora.Dictionary 的简单使用

    [NLP]文档集数据处理 gensim corpora.Dictionary 1. corpora 和 dictionary 2. 词典操作 3. 存储 4. 其他操作 5. 分批处理和分布式计算 6 ...

  3. Python Gensim Word2Vec

    Gensim is an open-source vector space and topic modelling toolkit. It is implemented in Python and u ...

  4. 【python gensim使用】word2vec词向量处理中文语料

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

  5. GloVe 教程之实战入门+python gensim 词向量

    前几天看论文,忽然看到了一个跟word2vec并列的词向量工具,这么厉害?还能跟word2vec相提并论? 果断需要试试. GloVe  它来自斯坦福的一篇论文,GloVe全称应该是  Global  ...

  6. 作者主题模型(Author-Topic Model)的Python Gensim实现

    Gensim中的主题模型包括三种,分别是LDA (Latent Dirichlet Allocation) 主题模型.加入了作者因素的作者主题模型 (Author-Topic Model, ATM) ...

  7. python gensim word2vec_gensim word2vec

    之前写过<中英文维基百科语料上的Word2Vec实验>,近期有不少同学在这篇文章下留言提问,加上最近一些工作也与Word2Vec相关,于是又做了一些功课,包括重新过了一遍Word2Vec的 ...

  8. 使用Python,OpenCV实现简单的场景边界/拍摄转换检测器

    使用Python,OpenCV进行简单的场景边界/拍摄转换检测器 1. 效果图 2. 实现 2.1 步骤 2.2 什么是"场景边界"和"拍摄过渡"? 2.3 代 ...

  9. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

最新文章

  1. 用Command实现校验器
  2. linux shell脚本:通过API实现git仓库从gitee向gitlab的批量迁移(gitlab api)
  3. Qt学习之路(27): 渐变填充
  4. mysql 取 映射数据库中_JAVA与数据库MySQL相连接
  5. 买iphone不买android,为何宁可用4年前的苹果6s,也不买两三千的安卓呢?理由很真实...
  6. elasticsearch亿级数据量全量索引导入优化方案
  7. Windows 7 ship party
  8. 面试必问------索引详解
  9. r语言必学的十个包肖凯_家长专栏语言发育迟缓儿童的家庭训练小游戏
  10. 数据库MySQL与可视化界面 SQLYog 安装教程
  11. 酒店管理系统--C语言版
  12. 关于网络营销基本理论的概述
  13. 不上网电脑安装python_离线安装python第三方库的实用方法:解决公司内网,服务器/电脑不能上网却需要安装python三方库问题(上:Windows环境中)...
  14. 【JS30-Wes Bos】实时显示的时钟网页 02
  15. mongodb 集群shard_MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
  16. python基础知识有哪些需要背(记住是基础知识)我是初学者
  17. Java方法的案例:求和、判断奇偶数、求最值
  18. ybt1223:An Easy Problem
  19. 骨传导式蓝牙耳机推荐,2022年值得买的骨传导耳机
  20. ilk,pch,pbd,obj,idb,pdb这些扩展名的意思

热门文章

  1. KITTI数据集数据初体验
  2. 华为防火墙telnet配置
  3. Wannafly挑战赛14 A:直角三棱锥
  4. 怎么验证mysql完整性_MySQL数据库认证高级(一)——数据完整性
  5. 【Discuz!跨站脚本攻击】--跨站脚本攻击
  6. 环境变量配置步骤(误删除找回方法)
  7. Eclipse 新建WEB工程的WebContent目录设置默认WebRoot,和设置编译class默认输出WebRoot\WEB-INF\classes
  8. 3个最基础的APP技术框架
  9. hbuilder前端需要的插件_这两款HTML5开发工具,前端开发工程师用了直呼内行
  10. 关于ubuntu无法播放土豆视频的解决方法