本月的每月挑战会主题是NLP,我们会在本文帮你开启一种可能:使用pandas和python的自然语言工具包分析你Gmail邮箱中的内容。
NLP-风格的项目充满无限可能:
情感分析是对诸如在线评论、社交媒体等情感内容的测度。举例来说,关于某个话题的tweets趋向于正面还是负面的意见?一个新闻网站涵盖的主题,是使用了更正面/负面的词语,还是经常与某些情绪相关的词语?这个“正面”的Yelp点评不是很讽刺么?(祝最后去的那位好运!) 分析语言在文学中的使用,进而衡量词汇或者写作风格随时间/地区/作者的变化趋势. 通过识别所使用的语言的关键特征,标记是否为垃圾内容。 基于评论所覆盖的主题,使用主题抽取进行相似类别的划分。 通过NLTK's的语料库,应用Elastisearch和WordNet的组合来衡量Twitter流API上的词语相似度,进而创建一个更好的实时Twitter搜索。 加入NaNoGenMo项目,用代码生成自己的小说,你可以从这里大量的创意和资源入手。将Gmail收件箱加载到pandas
让我们从项目实例开始!首先我们需要一些数据。准备你的Gmail的数据存档(包括你最近的垃圾邮件和垃圾文件夹)。
https://www.google.com/settings/takeout
现在去散步吧,对于5.1G大小的信箱,我2.8G的存档需要发送一个多小时。
当你得到数据并为工程配置好本地环境之后好,使用下面的脚本将数据读入到pandas(强烈建议使用IPython进行数据分析)
from mailbox import mboximport pandas as pd def store_content(message, body=None): if not body: body = message.get_payload(decode=True) if len(message): contents = { "subject": message['subject'] or "", "body": body, "from": message['from'], "to": message['to'], "date": message['date'], "labels": message['X-Gmail-Labels'], "epilogue": message.epilogue, } return df.append(contents, ignore_index=True) # Create an empty DataFrame with the relevant columnsdf = pd.DataFrame( columns=("subject", "body", "from", "to", "date", "labels", "epilogue")) # Import your downloaded mbox filebox = mbox('All mail Including Spam and Trash.mbox') fails = []for message in box: try: if message.get_content_type() == 'text/plain': df = store_content(message) elif message.is_multipart(): # Grab any plaintext from multipart messages for part in message.get_payload(): if part.get_content_type() == 'text/plain': df = store_content(message, part.get_payload(decode=True)) break except: fails.append(message)
上面使用Python的mailbox模块读取并解析mbox格式的邮件。当然还可以使用更加优雅的方法来完成(比如,邮件中包含大量冗余、重复的数据,像回复中嵌入的“>>>”符号)。另外一个问题是无法处理一些特殊的字符,简单起见,我们进行丢弃处理;确认你在这一步没有忽略信箱中重要的部分。
新闻热点
疑难解答