Gensim使用小解

本文介绍了Gensim库在话题建模和文本转换中的应用。讲解了如何处理停用词,使用corpora.Dictionary进行bag-of-words表示,以及利用Corpus Streaming优化内存使用。同时,讨论了Gensim的各种转换方法,如TF-IDF,LSI,LDA等,并强调了转换后的向量可以进行序列化和存储。最后,探讨了相似性查询,包括使用MatrixSimilarity和Similarity类进行大规模语料库的相似性计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Topic modelling for humans

   看着gensim这个标题都觉得霸气,从文本预处理,特征提出到主题聚类等,基本上包含了文本处理的所有功能。

Corpora and Vector Spaces

  语料与向量空间,这一节主要讲如何把文本从词变为bag-of-word。中文的话无非是中间加入了分词这一步骤。之前用过jieba,觉得效果还不错。

停用词git上有一个中文预料预处理

documents = ["做人要谦虚,但做事不要谦虚,毛遂自荐,让别人看到你,知道你的存在,知道你的能力,这样你才有机会,别人才会把重任交给你。",
             "天下没有好赚的钱,千万不要一口吃个胖子,先从小钱赚起吧",
             "不管从事什么行业,一定要相同行业或不同行业的人吸收新知识,而且要用请教的态度。",
             "犯错,就诚实地认错,并立刻改错,不要狡辩。",              
             ".要想成功,就要以失败为老师,在失败中汲取教训。",
             ".一定要守时!守时是对别人的尊重。",
             ".用真心诚意打动别人,让任何人为你做事。",
             "全力以赴迎接种种挑战,不要把困难看成是在整你。",
             "这一句没什么意思"]

f=open('stopwords.txt', encoding='gbk')
lines=f.readline()
stoplst=list(map(lambda x:x.strip('\n'), lines))
texts = [[word for word in jieba.lcut(document) if word not in stop lst] for document in documents]

但是发现停用词完全没有被过滤。后来发现,在stoplst中每个元素后面都有一个\n。
分词结果如下

[['做人','谦虚','做事','不要','谦虚','毛遂自荐','看到','知道','存在','知道','能力','机会','会','重任','交给'],
 ['天下', '没有', '好赚', '钱', '千万', '不要', '一口', '吃个', '胖子', '先', '从小', '钱', '赚起'],
 ['从事', '行业', '一定', '相同', '行业', '不同', '行业', '吸收', '新', '知识', '请教', '态度'],
 ['犯错', '诚实', '认错', '立刻', '改错', '不要', '狡辩'],
 ['.', '想', '成功', '失败', '老师', '失败', '中', '汲取', '教训'],
 ['.', '一定', '守时', '守时', '尊重'],
 ['.', '真心诚意', '打动', '任何人', '做事'],
 ['全力以赴', '迎接', '种种', '挑战', '不要', '困难', '看成', '整'],
 ['一句', '没什么', '意思']]

文中说了,文本的特征提取方法有很多,并且很重要,这里提到了一个garbage in, garbage out意思就是你算法再牛逼,你的输入有问题,输出还是不行,所以,怎么选取一个能够有效表述文本的特征非常重要。然后这里选择的最简单的bag-of-words,并且,为了方便表示,使用corpora.Dictionary 用id来

### Gensim 使用教程概述 Gensim 是一个用于主题建模和文档相似度分析的强大工具。为了帮助理解其功能,下面提供了一个详细的使用流程。 #### 安装 Gensim 库 要开始使用 Gensim 进行文本数据分析,需先确保已正确安装该库[^4]。可以通过 pip 工具轻松完成这一操作: ```bash pip install gensim ``` #### 文本预处理 在应用 LDA 或其他高级算法之前,通常需要对原始文本执行一系列清理工作。这可能涉及去除停用词、标点符号转换为小写形式等步骤。虽然具体的预处理技术取决于特定的任务需求,但大多数情况下都遵循类似的模式[^1]。 #### 构建并训练 LDA 模型 一旦完成了必要的准备工作之后,就可以着手创建 LDA (Latent Dirichlet Allocation) 模型实例来探索潜在的主题结构了。这里给出一段简单的 Python 代码片段展示如何利用 Gensim 实现这一点: ```python from gensim import corpora, models # 假设 texts 是经过预处理后的分词列表集合 dictionary = corpora.Dictionary(texts) corpus = [dictionary.doc2bow(text) for text in texts] lda_model = models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10, random_state=42, passes=15) topics = lda_model.print_topics(num_words=5) for topic in topics: print(topic) ``` 这段脚本首先定义了一个字典对象 `dictionary` 来映射单词到唯一的 ID;接着基于这个字典构建了一个稀疏矩阵表示法下的语料库 `corpus`;最后通过调用 `models.LdaModel()` 函数指定参数后得到最终的 LDA 模型,并打印出前五个最具有代表性的关键词组合形成的话题。 #### 展示 LSA 主题模型的结果 除了 LDA 外,还可以考虑采用另一种称为 Latent Semantic Analysis (LSA) 的方法来进行主题挖掘。以下是有关于怎样运用 Gensim 中的 LSA 功能的一个简单例子[^3]: ```python lsi_model = models.LsiModel(corpus=corpus, id2word=dictionary, num_topics=2) print(lsi_model.show_topics()) ``` 此部分代码会输出由两组不同概念构成的主题描述及其权重信息。 #### 利用 Top2Vec 提升分类性能 对于某些更复杂的自然语言处理任务而言,单纯依靠传统的统计学手段或许难以达到理想效果。此时不妨尝试引入更加先进的机器学习框架——比如 Top2Vec ——作为一种辅助机制参与到整个流水线当中去。具体来说就是借助后者所提供的高质量向量化表达作为特征输入给定的传统监督式学习器之中,从而有望获得更好的泛化能力与预测精度[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值