本文为 AI 研习社编译的技术博客,原标题 Mapping My Facebook Data — Part 1: Simple NLP,作者为 Hunter Heidenreich。
翻译 | 老赵 莫青悠 校对 | 付腾 整理 | MY
当一个 NLP(自然语言处理)在观察我的写作风格(也是如何处理我自己的 Facebook 数据!)
就在不久之前,我还十分痴迷于思考我在一天之内产生的文本数据总量的问题上。如果你像我一样,做大量的书写工作,这无疑是一个机会,邮件,短信,Facebook。当然,你也可能还有其他的更有创造性的输出。可能你写日记,写音乐等等。如果你是个学生,那么你可能还有一些需要书写的作用。对于我本人来说,我真的很希望可以从我产生的这些文本数据中得到一些启示,使用 NLP 来分析这些数据真的是一件非常酷的事情。
本系列将会记录我是如何去实现这一想法的,如果你也感兴趣的话,你也可以参照本系列,自己去尝试一下。
在考虑过我所有的数据之后,我决定聚焦于以下几个数据源:
我写的学校作业
我的日记
我创作的歌曲集
我的 Facebook 数据(包括我的评论,帖子和聊天内容)
在我整个工程中我使用了以上所有的数据源,但是在本系列中,我将仅仅使用我的 Facebook 数据。
对大多数数据来说,我只需要将它放入一个文本文件中,然后调用这个文本文件。但是对于 Facebook 的数据,我需要做一些额外的预处理。
我们要如何能够获取到 Facebook 的数据呢?事实上要你想象的简单很多。现在(2018.8.20),你可以通过以下步骤获得你的数据:
登入 Facebook
点击右上角的倒三角符号
点击设置
点击左上第三个选项“你的 Facebook 信息(Your Facebook Information)”
下一级菜单中就有“下载你的信息(Download Your Information)”
接下来,你就可以选择你的所需要的数据,可以选择某时间段内的,也可以选择以哪种格式存储你的数据。
我选择以 JSON 格式下载了所有的数据。当我全部下载完毕后,我就得到了如下图的文件结构:
每个文件夹中的文件都是我要求的 JSON 格式的。
我打算下载所有的 Facebook 数据,但是我并不希望在这个课题中使用所有的 Facebook 数据。对这个课题而言,我只关心我的帖子,评论和聊天历史。为了做到这些,我为每个种类的数据写了一个预处理脚本来下载所需要的内容到文本文件。
首先,处理信息:
你在这里会看到的是我正在遍历我的 messages 文件夹中的所有子文件夹。我从那里做的是我在信息 JSON 中读到的。对于每个可用的信息,我会检查它是否是我发送的信息。如果它不是 Facebook 默认的“You are now connected on Messenger”。接着我会使用它。我给信息添加时间戳,然后将其添加到采用 year.month.day.txt 格式的文件中,这是我标记所有文本文件的格式,以便我可以记录词汇随时间的变化。
如果某些情况下,JSON 的关键字不工作,我会忽略它。
对我写的帖子我做了非常类似的事情:
我的评论:
从那里开始,我已准备好使用我的 Facebook 数据。
首先,我们将编写一个简单的函数来获取特定类别中所有文件的列表。这将使我们能够轻松跟踪哪个是哪个,并且我们将在操作和分析数据时保留这些命名方案。
在我们实际读入数据之前,我们将编写一个函数,我们将用它以几种不同的方式预处理数据。
我们在这里做的是制作我们文本的 4 种变体。我们正在生产:
我们的原始数据删除了标点符号和小写
删除了停止词的数据
我们的数据源于此
我们的数据被推崇
考虑到这一点,我们现在可以创建一个基本对象,该对象将保存我们的文件数据,并允许用于在同一天集合来自 Facebook 的不同写作源:
现在让我们加载我们的数据并对其进行预处理。 我将在集合数据上演示代码,但它也适用于其他输入文件列表:
这可能需要一小段时间,但是当我们完成后,我们将能够开始查看有关我们文本的一些基本内容!
让我们从基础开始吧。我们将这些单词列表加载到各种来源中。让我们来算一下,看看我们最常用的词是什么。让我们看看我们的前 20 名。
我们可以这样写:
我们可以得到一个整齐的输出:
我喜欢只看我的词汇,所以这就是为什么我只记录我的个人来源。我觉得有趣的是我经常在聊天中使用“哈哈”的变体。我的大多数评论都是某人的名字。
那么,如果我们想要绘制单个单词以查看我们的用法如何从顶部单词到底部单词衰减,该怎么办?我们可以编写一个通用的柱状图函数,如下所示:
从那里,我们可以修改我们的前 20 个函数,并可以将我们的注释列表直接输入到图中:
我们得到两个漂亮的图像:
让我们为我们的数据生成一些基本统计数据。让我们设置一个函数来创建一个列表:
然后生成要存储到此函数的数据:
这些只是我认为有趣的一些统计数据。我这次保存了所有数据,因为我觉得这将是最有趣的。
可以看到我在 Facebook 上有 2,147 天的文字活动。
我的首要词是“哈哈”(在那里并不奇怪)。
总词汇大小为 19,508 个单词:o
而且我已经使用了近 400 万个字符。
那是很多文字数据!
我想知道我的词汇用法随着时间的推移而变化。我们怎样才能产生呢?好吧,幸运的是我们给所有文件留了时间戳!
首先,让我们创建我们的绘图函数:
现在让我们编写一些函数来描绘我们的单词使用情况:
我们得到:
我觉得有趣的是,在 2013 年中期,我使用了很多单词。我不太确定我要做什么,但是当你把它删除到独特的单词时,那天我使用的 20,000 个单词,并不是很多很独特......
更不用说,你绝对可以看到 2017 年后我的 Facebook 使用率下降。
我觉得这真的很酷!
我们终于得到它了!我们对一些 Facebook 数据的基本分析。希望你从 Facebook 数据中学到一两招,也许是你自己的一些东西!我知道当我开始分析我的时候,我确实做到了。如果你想要分享很酷的视觉效果或事物,请给我发表评论!我很想知道其他人在自己的数据中找到了什么。
下一次,我想我们会对我们的 Facebook 数据进行一些情绪分析,看看我们是否能找到任何有趣的花絮。
原文链接:https://towardsdatascience.com/mapping-my-facebook-data-part-1-simple-nlp-98ce41f7f27d
点击文末【阅读原文】即可观看更多精彩内容:
NLP 教程:词性标注、依存分析和命名实体识别解析与应用
想研究 NLP,不了解词嵌入与句嵌入怎么行?
手把手教你从零起步构建自己的快速语义搜索模型
文本分类又来了,用 Scikit-Learn 解决多类文本分类问题
CS224n斯坦福自然语言处理课程(中英双语字幕)
等你来译:
利用词向量和tsne算法来学习tensorflow
微软的TextWorld框架,NLP界的强化学习框架
深度学习的NLP工具