#!/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初探,希拉里邮件主题提取相关推荐

  1. 基于LDA模型的邮件主题分类

    资源地址:希拉里邮件7000封左右,Emails.csv 运行环境:windows10(64bit) + python3.6 + pycharm Python源代码: import warnings ...

  2. LDA模型中文文本主题提取丨可视化工具pyLDAvis的使用

    主题模型LDA的实现及其可视化pyLDAvis 1. 无监督提取文档主题--LDA模型 1.1 准备工作 1.2 调用api实现模型 2. LDA的可视化交互分析--pyLDAvis 2.1 安装py ...

  3. NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容—利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类

    NLP之TM之LDA:利用LDA算法瞬时掌握文档的主题内容-利用希拉里邮件数据集训练LDA模型并对新文本进行主题分类 目录 输出结果 设计思路 核心代码 训练数据集 LDA模型应用 输出结果 设计思路 ...

  4. 文本数据分析——主题提取+词向量化

    使用Python 进行简单文本类数据分析,包括: 1. 分词 2. 生成语料库,tfidf加权 3. lda主题提取模型 4. 词向量化word2vec 参考: http://zhuanlan.zhi ...

  5. Ironport对邮件主题中包括特殊字符的过滤

    公司使用Ironport做为邮件网关已经有多年了,在今年又做了cluster模式,使公司的邮件系统更加稳定及搞高了可用性.Ironport集防毒与垃圾邮件过滤,同时可定制邮件接收及发送策略,可对邮件内 ...

  6. php语言中不能包含html标签,在邮件主题中包含html标签[PHP]

    ,邮件客户端将不会呈现为HTML 按照电子邮件RFC,邮件主题不能有内容类型 3.1.2. STRUCTURE OF HEADER FIELDS Once a field has been unfol ...

  7. 电子邮件营销中的邮件主题设计

    关于电子邮件营销的邮件主题设计,博主主要跟大家分享五个原则,按照这五个原则行事,就能把邮件营销做好. 原则1.电子邮件主题体现出品牌或者产品信息 有独特价值的产品.信息或者给人印象深刻的品牌出现在邮件 ...

  8. 华硕 ROG主题 提取主题包

    原系统提取主题包 华硕 ROG主题 提取主题包扔硬里直接安装,喜欢的点此下载 另有其它十八个主题 点此下载 Windows 微软官方主题下载最新七个主题 点此下载 ASUS ROG主题包,图标末完成点 ...

  9. 使用a标签发送邮件(收件人,抄送地址,密件抄送地址,邮件主题,邮件内容)

    目录 内容介绍 一.相关参数 二.代码 三.a标签水平垂直居中 1.display:block 2.flex布局 四.效果图 五.更多内容 六.happy一下 内容介绍   使用a标签拨发送邮件(收件 ...

最新文章

  1. 邮箱性质--全选单选的操作和传值 用属性的name传值
  2. BT项目的运作之一项目建设方案与BT总包方的选择
  3. 运筹学(最优化理论)学习笔记 | 共轭梯度法
  4. 【Python】青少年蓝桥杯_每日一题_6.11_打印星号
  5. 翻译: Oralce官方文档-- Data Blocks, Extents, and Segments
  6. mac mysql mysqldump_Mac下Mysql导出sql语句的方法及可能遇到的mysqldump: command not found...
  7. css背景图片、圆角、盒子阴影、浮动
  8. libopencv_core.a(persistence.cpp.o): undefined reference to symbol 'gzclose'
  9. 分析师视角:2018年的数据中心3大预测
  10. 网站服务器在境外境内怎么维护,涉黄网站服务器移至境外 境内维护人员将受制裁...
  11. 怎么用python分析数据_如何用python进行数据分析?
  12. 从源码分析非线程安全集合类的不安全迭代器
  13. CloudCompare 软件手册
  14. oracle sql 拆分字符串,oracle 拆分字符串
  15. MPEG-2 TS流结构浅析
  16. JAVA互联网架构师VIP项目实战(完整)
  17. cad线段总和lisp_autocadlisp统计多段线方法
  18. element ui 日历空控件添加农历 节气和家假日
  19. 智源AI日报(2022-09-02):我是如何从头开始写一篇顶级论文的
  20. python爬取图片失败显示404_python3.7中Web抓取时出现http404错误

热门文章

  1. sqc文件的编译过程
  2. 简历制作-Word 2007插入相片
  3. Android: 在 TextView 里使用删除线
  4. 《数字孪生十问 :分析与思考》陶飞等
  5. 通达信数据接口可以获取股票行情
  6. 对比 Git 与 SVN,这篇讲的很易懂
  7. 设计不是一个人就可以做出来的,集思广益通常到了中国就变成了意气之争,面子问题了...
  8. linux python m2crypto,python – 如何在Ubuntu上安装M2Crypto?
  9. ubuntu系统tree命令无效(安装tree命令)问题的解决办法
  10. 自动化计算机控制技术,计算机控制技术东南大学自动化学院课件