开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本相似性实验4】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15507
文本相似性实验4
下面带大家做一个文本分析的案例
首先下载一个os操作系统的包,后面如果看目录,基本的os操作用得到。
打开‘射雕英雄传’目录下的电子小说,注意编码问题,再把它写到utf8的编码,原来它的默认编码是gb2312。现在就是两个文件打开了,下面再写一段循环把里面的每一行写到文件上,做下转换。
下面第一个分析是做高词频分析,主要是用jieba,大家可以去图示的博客里看详细介绍。我们是用jieba里面的analyse功能,打开前面的utf8小说,打开以后可以把内容读到sentences里面来,sentences里面放的是电子小说的内容。
接下来看analyse下面有一个函数叫extract_tags,用这个函数抽取标签,抽取关键词,然后把刚刚读的sentences作为参数传进去,输入数据,找权重最高的20个特征值,如果同时显示权重才能True,不显示权重就选择False。
注意:它默认用TF-IDF抽取关键词,jieba功能很强大,它里面的函数默认用TFIDF作为权重值,去做关键词抽取。
现在执行一下,做好以后它把20个权重最高的关键词放在tags里面,显示一下tags,里面就是权重最高的关键词,主要是小说里面的主角,但是这里有点小问题:里面有‘黄蓉道’、‘郭靖道’,因为它可能认为这是个词,很像人的名字,所以要处理一下,用手工校正。这是jieba里面的一个功能,它通过suggest_freq函数来设要不要把原来的一个词分开来,现在设一下让它能分开,就是‘黄蓉道’本来是上面分的是一个词,现在要把它分开。
做一下以后就把它分开了,然后找前20个权重最高的词再显示一下,运行一下以后里面就没有‘黄蓉道’、’郭靖道’了。
下面再看一下,我们要前50个权重最高的关键词。
观察一下里面的词更多了,但是里面可能有些词,我们不是很感兴趣,比如‘甚么’,也许是大家没有兴趣的或者不重要的、没有意义的。
那么下面再介绍一个功能,就是jieba里面可以删除那些没有意义的、意义不大的词。它里面有del_word可以删除,现在删除一下刚刚第四个词‘甚么’,然后把放在最后面打开的文件关闭一下,最上面打开的文件,文件内容读完以后也关闭一下,不关闭会占内存。
下面来统计词频,首先给它jieba分词,然后把分词放在一个字典里面,一个是key(词),一个是value(词频)。这里教大家一个技巧:我们用字典里面带着一个函数,word_dict,这是一个字典,它里面有个get函数,get函数括号里面有两个参数,一个是key,当key不存在的时候,默认value是0,因为我们要构造词频,那有可能第一次这个词在字典里是没有的,所以它的词频就是0。如果有就可以把它找到,下面+1就是统计词频。
运行一下,刚刚分好词的小说,现在一个代码就把词频统计好了。这个代码里面最大的技巧就是要知道字典里面一个get函数,它里面就是读key,如果key不存在,value就是0。
接下来就是来显示字典里面的keys,用list把keys转成列表,然后看前20条,现在来执行一下,这是分好的每一个词,但是还没有排过序,我们只看key,希望它按照高词频排序。
要对分好词以及分好词的词频排序用sorted函数,它可以对字典进行排序,可以按照key后面的值来排序。
接下来再用lambda,它后面等于就是函数的参数(函数代码),item后面表示0是key,1是value,key是按照value来排序,排完序以后先print一下,看看有多少个词(key),然后显示词频最高的前20。
小说里面总共有45731个词,现在词频从高到低排序,前20个里面郭靖是词频最高的。

