[翻译] 在Python中使用LDA处理文本

发表于2个月前(2016-02-17 16:10)   阅读(78) | 评论(0) 1人收藏此文章, 我要收藏

目录[-]

  • 安装
  • 示例

说明:

原文:http://chrisstrelioff.ws/sandbox/2014/11/13/getting_started_with_latent_dirichlet_allocation_in_python.html

本文包含了上文的主要内容。

关于LDA:LDA漫游指南

使用的python库lda来自:https://github.com/ariddell/lda 。

gensim库也含有lda相关函数。

安装

$ pip install lda --user

示例

from __future__ import division, print_functionimport numpy as np
import lda
import lda.datasets# document-term matrix
X = lda.datasets.load_reuters()
print("type(X): {}".format(type(X)))
print("shape: {}\n".format(X.shape))
print(X[:5, :5])'''输出:type(X): <type 'numpy.ndarray'>
shape: (395L, 4258L)[[ 1  0  1  0  0][ 7  0  2  0  0][ 0  0  0  1 10][ 6  0  1  0  0][ 0  0  0  2 14]]
'''

X为395*4298的矩阵,意味着395个文本,共4258个单词。值代表出现次数。

看一下是哪些单词:

# the vocab
vocab = lda.datasets.load_reuters_vocab()
print("type(vocab): {}".format(type(vocab)))
print("len(vocab): {}\n".format(len(vocab)))
print(vocab[:6])'''输出
type(vocab): <type 'tuple'>
len(vocab): 4258('church', 'pope', 'years', 'people', 'mother', 'last')
'''

X中第0列对应的单词是church,第1列对应的单词是pope

下面看一下文章标题:

# titles for each story
titles = lda.datasets.load_reuters_titles()
print("type(titles): {}".format(type(titles)))
print("len(titles): {}\n".format(len(titles)))
print(titles[:2])  # 前两篇文章的标题'''输出
type(titles): <type 'tuple'>
len(titles): 395('0 UK: Prince Charles spearheads British royal revolution. LONDON 1996-08-20', '1 GERMANY: Historic Dresden church rising from WW2 ashes. DRESDEN, Germany 1996-08-21')
'''

训练数据,指定20个主题,500次迭代:

model = lda.LDA(n_topics=20, n_iter=500, random_state=1)
model.fit(X)

主题-单词(topic-word)分布:

topic_word = model.topic_word_
print("type(topic_word): {}".format(type(topic_word)))
print("shape: {}".format(topic_word.shape))'''输出:
type(topic_word): <type 'numpy.ndarray'>
shape: (20L, 4258L)
'''

topic_word中一行对应一个topic,一行之和为1。 看一看'church', 'pope', 'years'这三个单词在各个主题中的比重:

print(topic_word[:, :3])'''输出
[[  2.72436509e-06   2.72436509e-06   2.72708945e-03][  2.29518860e-02   1.08771556e-06   7.83263973e-03][  3.97404221e-03   4.96135108e-06   2.98177200e-03][  3.27374625e-03   2.72585033e-06   2.72585033e-06][  8.26262882e-03   8.56893407e-02   1.61980569e-06][  1.30107788e-02   2.95632328e-06   2.95632328e-06][  2.80145003e-06   2.80145003e-06   2.80145003e-06][  2.42858077e-02   4.66944966e-06   4.66944966e-06][  6.84655429e-03   1.90129250e-06   6.84655429e-03][  3.48361655e-06   3.48361655e-06   3.48361655e-06][  2.98781661e-03   3.31611166e-06   3.31611166e-06][  4.27062069e-06   4.27062069e-06   4.27062069e-06][  1.50994982e-02   1.64107142e-06   1.64107142e-06][  7.73480150e-07   7.73480150e-07   1.70946848e-02][  2.82280146e-06   2.82280146e-06   2.82280146e-06][  5.15309856e-06   5.15309856e-06   4.64294180e-03][  3.41695768e-06   3.41695768e-06   3.41695768e-06][  3.90980357e-02   1.70316633e-03   4.42279319e-03][  2.39373034e-06   2.39373034e-06   2.39373034e-06][  3.32493234e-06   3.32493234e-06   3.32493234e-06]]
'''

获取每个topic下权重最高的5个单词:

n = 5
for i, topic_dist in enumerate(topic_word):topic_words = np.array(vocab)[np.argsort(topic_dist)][:-(n+1):-1]print('*Topic {}\n- {}'.format(i, ' '.join(topic_words)))'''输出:
*Topic 0
- government british minister west group
*Topic 1
- church first during people political
*Topic 2
- elvis king wright fans presley
*Topic 3
- yeltsin russian russia president kremlin
*Topic 4
- pope vatican paul surgery pontiff
*Topic 5
- family police miami versace cunanan
*Topic 6
- south simpson born york white
*Topic 7
- order church mother successor since
*Topic 8
- charles prince diana royal queen
*Topic 9
- film france french against actor
*Topic 10
- germany german war nazi christian
*Topic 11
- east prize peace timor quebec
*Topic 12
- n't told life people church
*Topic 13
- years world time year last
*Topic 14
- mother teresa heart charity calcutta
*Topic 15
- city salonika exhibition buddhist byzantine
*Topic 16
- music first people tour including
*Topic 17
- church catholic bernardin cardinal bishop
*Topic 18
- harriman clinton u.s churchill paris
*Topic 19
- century art million museum city
'''

文档-主题(Document-Topic)分布:

doc_topic = model.doc_topic_
print("type(doc_topic): {}".format(type(doc_topic)))
print("shape: {}".format(doc_topic.shape))'''输出:
type(doc_topic): <type 'numpy.ndarray'>
shape: (395, 20)
'''

一篇文章对应一行,每行的和为1。

输入前10篇文章最可能的Topic:

for n in range(10):topic_most_pr = doc_topic[n].argmax()print("doc: {} topic: {}".format(n, topic_most_pr))'''输出:
doc: 0 topic: 8
doc: 1 topic: 1
doc: 2 topic: 14
doc: 3 topic: 8
doc: 4 topic: 14
doc: 5 topic: 14
doc: 6 topic: 14
doc: 7 topic: 14
doc: 8 topic: 14
doc: 9 topic: 8
'''

关于数据集替换

下载包以后,把datasets.py里面的load_reuters()里面的reuters.ldac,load_reuters_vocab()里面的reuters.tokens,load_reuters_titles()里面的reuters.titles替换成自己的数据集就行了.数据集格式按照包里的生成就行.

在Python中使用LDA处理文本相关推荐

  1. python怎么对齐文件_说说在 python 中,如何对齐文本

    在 python 中,可用 rjust() . ljust() 和 center() 方法分别实现文本右对齐.左对齐以及居中对齐功能. 它们的第一个参数是一个整数,表示填充后的总长度.不足的部分,使用 ...

  2. 在Python中查找和替换文本,玩转Python正则

    最简单的查找替换 在Python中查找和替换非常简单,如果当前对象是一个字符串str时,你可以使用该类型提供的find() 或者index() 方法查找指定的字符,如果能找到则会返回字符第一次出现的索 ...

  3. python字符串之查找与替换_在Python中查找和替换文本

    最简单的查找替换 在Python中查找和替换非常简单,如果当前对象是一个字符串str时,你可以使用该类型提供的find()或者index()方法查找指定的字符,如果能找到则会返回字符第一次出现的索引, ...

  4. python docx 替换文字_在.docx文件-Python中查找和替换文本

    我一直在寻找一种方法来查找和替换docx文件中的文本,但运气不好.我试过docx模块,但没能成功.最后,我使用zipfile模块并替换docx存档中的document.xml文件,得出了下面描述的方法 ...

  5. python xlrd使用_在Python中使用xlrd以文本形式读取数值Excel数据

    我正在尝试使用xlrd读取Excel文件,我想知道是否有方法忽略Excel文件中使用的单元格格式,并将所有数据作为文本导入? 以下是我目前使用的代码:import xlrd xls_file = 'x ...

  6. 手把手教你在Python中实现文本分类(附代码、数据集)

    作者: Shivam Bansal 翻译:申利彬 校对:丁楠雅 本文约2300字,建议阅读8分钟. 本文将详细介绍文本分类问题并用Python实现这个过程. 引言 文本分类是商业问题中常见的自然语言处 ...

  7. Python中实现文本分类(附代码、数据集)

    本文将详细介绍文本分类问题并用Python实现这个过程. 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个或多个已定义好的类别中.文本分类的一些例子如下: 分析社交媒体中 ...

  8. python读取文本两个数字的成语_R 和 Python 中的文本挖掘:8 个入门小贴士

    你希望学习文本挖掘,却发现大多数教程难度跨度很大?或者说你找不到心仪的数据集? 本文将会通过 8 个小贴士帮助你走进文本挖掘之门. 对文本保持好奇 在数据科学世界中,凡事的第一步都是"感到好 ...

  9. Python中LDA 计算 perplexity来确定主题数

    转载自 https://blog.csdn.net/qq_23926575/article/details/79472742 1.LDA主题模型困惑度  这部分参照:LDA主题模型评估方法–Perpl ...

最新文章

  1. sentinel限流_微服务架构进阶:Sentinel实现服务限流、熔断与降级
  2. 一分钟学会spring注解之@Scope注解
  3. 前端应该了解的颜色的寓意
  4. python如何编程-编程零基础应当如何开始学习 Python?
  5. 第7章 PCA与梯度上升法
  6. java语音播报案例
  7. 【渝粤教育】电大中专职业应用写作_1作业 题库
  8. Factors of Factorial(AtCoder-2286)
  9. 2021-02-23 天地图图层类型总结
  10. Linux查询命令帮助语句,linux有关命令的帮助和用法查看
  11. 【清华大学】操作系统 陈渝 Part4 ——物理内存管理 之 非连续内存分配
  12. docker的代理配置_wuli大世界_新浪博客
  13. Sql取得两表关联数据
  14. 架构师说低代码:走出半生,归来仍是“毒瘤”!
  15. 字符串生成条码(CODE128),并实现在水晶报表上的条码打印!
  16. react 图片剪切(react-easy-crop)
  17. mysql日期以及字符串相关格式化转换
  18. 搜狗搜索曝光“搜狗商店” 人工智能概念产品可提升人类能力
  19. kafka安装(windows版)
  20. idm下载器是免费的吗?有哪些功能

热门文章

  1. OpenCV中Mat类的重载运算符operator()的用法
  2. WIN7下的VS2008在调试OpenCV_2.3.1的程序时报错丢失tbb_debug.dll的解决办法~
  3. 星之卡比镜之迷宫机器人_迷宫武器盘点 | 是兄弟,就拿大宝剑砍我!
  4. leetcode算法题--扁平化嵌套列表迭代器
  5. 鸿蒙2.0操作体验,鸿蒙2.0操作系统正式版-华为鸿蒙2.0操作系统正式版官方预约 v1.0.0-优盘手机站...
  6. Configuring the VNC server/viewer in Linux.
  7. docker pull mysql
  8. Java设计模式之十一 ---- 策略模式和模板方法模式
  9. RAC常见命令检查状态
  10. AbstractFactory抽象工厂模式(创建型模式)