LDA初探,希拉里邮件主题提取
#!/usr/bin/env python# -*- encoding: utf-8 -*-'''
@Author : {Jack Zhao}@Time : 2019/11/10 9:26@Contact : {zc_dlmu@163.com}@Desc : 希拉里邮件LDA主题提取
'''import numpy as np
import pandas as pd
import refrom gensim import corpora, models, similarities
import gensim"""第一步:用正则表达式清洗数据,并去除停用词"""
#这里的路径一定要搞清楚,相对路径和绝对路径,在py中究竟该怎么写
#这里修改为utf-8也没用,依旧报错UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 0-1: invali,需要将csv文件
#另存为utf-8格式
df = pd.read_csv("../data/HillaryEmails.csv",encoding='utf-8')
# 原邮件数据中有很多Nan的值,直接扔了。
df = df[['Id', 'ExtractedBodyText']].dropna()# 用正则表达式清洗数据
def clean_email_text(text):text = text.replace('\n', " ") # 新行,我们是不需要的text = re.sub(r"-", " ", text) # 把 "-" 的两个单词,分开。(比如:july-edu ==> july edu)text = re.sub(r"\d+/\d+/\d+", "", text) # 日期,对主体模型没什么意义text = re.sub(r"[0-2]?[0-9]:[0-6][0-9]", "", text) # 时间,没意义text = re.sub(r"[\w]+@[\.\w]+", "", text) # 邮件地址,没意义text = re.sub(r"/[a-zA-Z]*[:\//\]*[A-Za-z0-9\-_]+\.+[A-Za-z0-9\.\/%&=\?\-_]+/i", "", text) # 网址,没意义# 以防还有其他除了单词以外的特殊字符(数字)等等,我们把特殊字符过滤掉# 只留下字母和空格# 再把单个字母去掉,留下单词pure_text = ''for letter in text:if letter.isalpha() or letter == ' ':pure_text += lettertext = ' '.join(word for word in pure_text.split() if len(word) > 1)return textdocs_text = df['ExtractedBodyText']
docs = docs_text.apply(lambda s: clean_email_text(s))# 得到所有邮件的内容
doclist = docs.values
print("一共有", len(doclist), "封邮件。\n")
print("第1封邮件未清洗前的内容为: \n", docs_text.iloc[0], '\n')# 去除停用词,处理成gensim需要的输入格式
stopwords = [word.strip() for word in open('../data/stopwords.txt', 'r').readlines()]
# 每一封邮件都有星期和月份,这里也把他们过滤掉
weeks = ['monday', 'mon', 'tuesday', 'tues', 'wednesday', 'wed', 'thursday', 'thur', 'friday', 'fri', 'saturday', 'sat','sunday', 'sun']
months = ['jan', 'january', 'feb', 'february', 'mar', 'march', 'apr', 'april', 'may', 'jun', 'june', 'jul', \'july', 'aug', 'august', 'sept', 'september', 'oct', 'october', 'nov', 'november', 'dec', 'december']
stoplist = stopwords + weeks + months + ['am', 'pm']
texts = [[word for word in doc.lower().split() if word not in stoplist] for doc in doclist]texts = [[word for word in doc.lower().split() if word not in stoplist] for doc in doclist]
print("第1封邮件去除停用词并处理成gensim需要的格式为:\n", texts[0], '\n')"""第二步:构建语料库,将文本ID化"""
dictionary = corpora.Dictionary(texts)
corpus = [dictionary.doc2bow(text) for text in texts]
# 将每一篇邮件ID化
print("第1封邮件ID化后的结果为:\n",corpus[0],'\n')"""训练LDA模型"""
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10)# 所有主题的单词分布
print(lda.print_topics(num_topics=10, num_words=10))"""第三步:查看某封邮件所属的主题"""
print("第1封邮件的大致内容为:\n",texts[0],'\n')
topic = lda.get_document_topics(corpus[0])
print("第1封邮件的主题分布为:\n",topic,'\n')# 希拉里发的两条推特
# 给大伙翻译一下这两句:
# 这是选举的一天!数以百万计的美国人投了希拉里的票。加入他们吧,确定你投给谁。
# 希望今天每个人都能度过一个安乐的感恩节,和家人朋友共度美好时光——来自希拉里的问候。twitter = ["It's Election Day! Millions of Americans have cast their votes for Hillary—join them and confirm where you vote ","Hoping everyone has a safe & Happy Thanksgiving today, & quality time with family & friends. -H"]text_twitter = [clean_email_text(s) for s in twitter]
text_twitter = [[word for word in text.lower().split() if word not in stoplist] for text in text_twitter]
corpus_twitter = [dictionary.doc2bow(text) for text in text_twitter]
topics_twitter = lda.get_document_topics(corpus_twitter)
print("这两条推特的主题分布分别为:\n",topics_twitter[0] ,'\n',topics_twitter[1])
几个重要概念的解释
LDA初探,希拉里邮件主题提取相关推荐
- 基于LDA模型的邮件主题分类
资源地址:希拉里邮件7000封左右,Emails.csv 运行环境:windows10(64bit) + python3.6 + pycharm Python源代码: import warnings ...
- LDA模型中文文本主题提取丨可视化工具pyLDAvis的使用
主题模型LDA的实现及其可视化pyLDAvis 1. 无监督提取文档主题--LDA模型 1.1 准备工作 1.2 调用api实现模型 2. LDA的可视化交互分析--pyLDAvis 2.1 安装py ...
- NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类
NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容-利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类 目录 输出结果 设计思路 核心代码 训练数据集 LDA模型应用 输出结果 设计思路 ...
- 文本数据分析——主题提取+词向量化
使用Python 进行简单文本类数据分析,包括: 1. 分词 2. 生成语料库,tfidf加权 3. lda主题提取模型 4. 词向量化word2vec 参考: http://zhuanlan.zhi ...
- Ironport对邮件主题中包括特殊字符的过滤
公司使用Ironport做为邮件网关已经有多年了,在今年又做了cluster模式,使公司的邮件系统更加稳定及搞高了可用性.Ironport集防毒与垃圾邮件过滤,同时可定制邮件接收及发送策略,可对邮件内 ...
- php语言中不能包含html标签,在邮件主题中包含html标签[PHP]
,邮件客户端将不会呈现为HTML 按照电子邮件RFC,邮件主题不能有内容类型 3.1.2. STRUCTURE OF HEADER FIELDS Once a field has been unfol ...
- 电子邮件营销中的邮件主题设计
关于电子邮件营销的邮件主题设计,博主主要跟大家分享五个原则,按照这五个原则行事,就能把邮件营销做好. 原则1.电子邮件主题体现出品牌或者产品信息 有独特价值的产品.信息或者给人印象深刻的品牌出现在邮件 ...
- 华硕 ROG主题 提取主题包
原系统提取主题包 华硕 ROG主题 提取主题包扔硬里直接安装,喜欢的点此下载 另有其它十八个主题 点此下载 Windows 微软官方主题下载最新七个主题 点此下载 ASUS ROG主题包,图标末完成点 ...
- 使用a标签发送邮件(收件人,抄送地址,密件抄送地址,邮件主题,邮件内容)
目录 内容介绍 一.相关参数 二.代码 三.a标签水平垂直居中 1.display:block 2.flex布局 四.效果图 五.更多内容 六.happy一下 内容介绍 使用a标签拨发送邮件(收件 ...
最新文章
- 邮箱性质--全选单选的操作和传值 用属性的name传值
- BT项目的运作之一项目建设方案与BT总包方的选择
- 运筹学(最优化理论)学习笔记 | 共轭梯度法
- 【Python】青少年蓝桥杯_每日一题_6.11_打印星号
- 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments
- mac mysql mysqldump_Mac下Mysql导出sql语句的方法及可能遇到的mysqldump: command not found...
- css背景图片、圆角、盒子阴影、浮动
- libopencv_core.a(persistence.cpp.o): undefined reference to symbol 'gzclose'
- 分析师视角:2018年的数据中心3大预测
- 网站服务器在境外境内怎么维护,涉黄网站服务器移至境外 境内维护人员将受制裁...
- 怎么用python分析数据_如何用python进行数据分析?
- 从源码分析非线程安全集合类的不安全迭代器
- CloudCompare 软件手册
- oracle sql 拆分字符串,oracle 拆分字符串
- MPEG-2 TS流结构浅析
- JAVA互联网架构师VIP项目实战(完整)
- cad线段总和lisp_autocadlisp统计多段线方法
- element ui 日历空控件添加农历 节气和家假日
- 智源AI日报(2022-09-02):我是如何从头开始写一篇顶级论文的
- python爬取图片失败显示404_python3.7中Web抓取时出现http404错误
热门文章
- sqc文件的编译过程
- 简历制作-Word 2007插入相片
- Android: 在 TextView 里使用删除线
- 《数字孪生十问 :分析与思考》陶飞等
- 通达信数据接口可以获取股票行情
- 对比 Git 与 SVN,这篇讲的很易懂
- 设计不是一个人就可以做出来的,集思广益通常到了中国就变成了意气之争,面子问题了...
- linux python m2crypto,python – 如何在Ubuntu上安装M2Crypto?
- ubuntu系统tree命令无效(安装tree命令)问题的解决办法
- 自动化计算机控制技术,计算机控制技术东南大学自动化学院课件