然后读入我们的数据文件datascience.csv,注意它的编码是中文GB18030,不是Pandas默认设置的编码,所以此处需要显式指定编码类型,以免出现乱码错误。 我们来看看数据框的头几行,以确认读取是否正确。 显示结果如下: 没问题,头几行内容所有列都正确读入,文字显式正常。我们看看数据框的长度,以确认数据是否读取完整。 执行的结果为: 行列数都与我们爬取到的数量一致,通过。 下面我们需要做一件重要工作——分词。这是因为我们需要提取每篇文章的关键词。而中文本身并不使用空格在单词间划分。此处我们采用“结巴分词”工具。这一工具的具体介绍和其他用途请参见《如何用Python做中文分词?》一文。 文章链接:
我们首先调用jieba分词包。 我们此次需要处理的,不是单一文本数据,而是1000多条文本数据,因此我们需要把这项工作并行化。这就需要首先编写一个函数,处理单一文本的分词。 有了这个函数之后,我们就可以不断调用它来批量处理数据框里面的全部文本(正文)信息了。你当然可以自己写个循环来做这项工作。但这里我们使用更为高效的apply函数。 下面这一段代码执行起来,可能需要一小段时间。请耐心等候。 执行过程中可能会出现如下提示。没关系,忽略就好。 执行完毕之后,我们需要查看一下,文本是否已经被正确分词。 结果如下: 单词之间都已经被空格区分开了。下面我们需要做一项重要工作,叫做文本的向量化。 不要被这个名称吓跑。它的意思其实很简单。因为计算机不但不认识中文,甚至连英文也不认识,它只认得数字。我们需要做的,是把文章中的关键词转换为一个个特征(列),然后对每一篇文章数关键词出现个数。 假如这里有两句话: I love the game. I hate the game. 那么我们就可以抽取出以下特征: I love hate the game 然后上面两句话就转换为以下表格: 第一句表示为[1, 1, 0, 1, 1],第二句是[1, 0, 1, 1, 1]。这就叫向量化了。机器就能看懂它们了。 原理弄清楚了,让我们引入相关软件包吧。 处理的文本都是微信公众号文章,里面可能会有大量的词汇。我们不希望处理所有词汇。因为一来处理时间太长,二来那些很不常用的词汇对我们的主题抽取意义不大。所以这里做了个限定,只从文本中提取1000个最重要的特征关键词,然后停止。 下面我们开始关键词提取和向量转换过程: 到这里,似乎什么都没有发生。因为我们没有要求程序做任何输出。下面我们就要放出LDA这个大招了。先引入软件包: 然后我们需要人为设定主题的数量。这个要求让很多人大跌眼镜——我怎么知道这一堆文章里面多少主题?! (责任编辑:本港台直播) |