开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本相似性实验5】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15508
文本相似性实验5
接下来的功能就是绘制词云
我们用了一个wordcloud在这里面,然后它里面又用了WordCload,STOPWORDS,ImageColorGenerator包,运行一下,这里面关键是WordCloud模块里面的函数,这个类要把词频给segDict,它传的参数一定要是一个字典格式。
所以老师把前面刚刚做的字典word里面的两个值,一个key一个value拿出来,然后再构造一个字典,要拿出来构造是因为value默认不是一个数值,所以给它乘个1.0,它的格式是字典格式,然后传过来这个字典就可以了。
下面就可以来做词云,但是它汉字没有显示,所以大家注意一下要指定字体,老师已经在simdata目录下放字体文件了(黑体),我们在参数里面font_path,把字体的路径指定一下就可以了,然后可以自己设置字体大小。
下面就能够显示词云,大家可以查资料做更好看的词云,包括可以再做背景图。接下来代码就表示我们要熟悉的符号,前面做的是长度小于2就不要了,长度为1的是标点符号不要,现在只要分完词以后在这个分词结构里面都要;看一下总共有65万,包括长度为1的标点符号。
下面就是做词向量的处理,这里有个问题:这个分好词的电子小说有可能是在手机里面看的,所以完整的一句话有可能断掉;一句话的上下文很有语义,如果一句话还没讲完就断掉了会影响语义的,所以前面这一串做完了以后的效果不好,比如上面分好的词做词向量之后查它的相似性,而洪七公和欧阳锋的相似性是负的,在《射雕英雄传》里面这两个人是很相似的,如果不相似就是它词向量的上下文语义断掉了,所以我们下面做一些测试效果都是不好,比如成吉思汗和铁木真是同一个人,相似度竟然只有0.01。
下面关键是对数据的处理很重要,就是因为小说里面很多句子被人为隔断,我们用sentences,打开一个小说放在sentences里面,我们把里面所有的换行去掉,因为它里面的换行是不对的。先把换行符号替换成空,把它连起来拼在一起,不要换行了,然后再把里面的引号也替换成空,这样就把整个电子小说连接成一行了。接下来就是new_sentences,替换成一个长的、一行的,这个new_sentences里面再做整个替换,把里面所有序号的地方替换成序号和下划线,所有问号的地方替换成问号和下划线。一般完整的一句话是句号结束、问号结束或者是感叹号结束,这里做了句号和问号,把它替换成下划线是因为用字符串里面的split,就是分割字符串的,以下划线作为判断条件来把一个长句子分成一行行,这样我们后面得到的以句号和问号结尾的一句话就是完整的一句话,语义是比较完整的,然后看一下它平均的长度是一行大约32个字词。
接下来就照刚处理过的句子再进行分词,这个分词的结果显示一下,再对分好的词做一些词频统计。这里引入了默认词典(defauldict),collections里面有一个默认词典,它里面统计词频也很强大。
接下来我们给语料处理以后再来组词向量。中间讲过语料词典,bow词袋模型,就是每个词给它一个编号,前面是词的编号,后面就是词频,语料词典功能很强大。下面是一句话也可以转成bow词袋模型,现在用的是第三句话,下面括号里面的编号代表每个词是一个编号,后面是它的词频,这就是bow模型。
这里有一个互动,它是一个词分成一个个词,然后词和词频,就是词袋模型。
后面就可以自己测试tfidf、去训练词向量、做各种测试,这就是文本的分析、电子小说的一个分析,实验内容就到这里。