社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python分析《都挺好》中的人物关系

Python中文社区 • 6 年前 • 929 次点击  


文/Kingshine 图片来源于网络


作者简介:KingShine,现居北京,程序猿一枚。主要方向为数据分析、自然语言处理,大数据。希望结交到志同道合的朋友,共同进步。

本文作者已加入Python中文社区专栏作者计划

如今大火的电视剧《都挺好》源于阿耐的同名小说,今天我们来对这部小说使用python分析一下人物关系。本文主要使用google推出的word2vec进行分析。使用的库主要有jieba、gensim。

一、文本准备

从网上下载《都挺好》小说txt。打开查看如下所示:

可以看出,文本中有分段以及大量的换行符,所以在读取文本时需要先去除这些符号。读取文本函数如下:

二、文本分词

在使用word2vec进行模型训练之前,首先需要将文本处理成word2vec可以操作的格式,即分词后使用空格分隔的文本。本文使用jieba进行分词,为了提高分词效果,加入了用户字典和停用词设置。

用户字典格式为:

停用词格式为:

以下是添加用户字典的代码:

以下是添加停用词设置:

下面开始分词,一开始直接使用jieba分词,但是后面做相似度分析的时候效果不好,因为好多无关词性的词也跑出来,如下图:

所以为了提高效果,在分词的时候加入了词性,分词的代码如下:

调用函数之后会产生两个文件,一个文件是分词的文件,用来进行word2vec训练,另一个文件存储分词相应的词性。此时,我们还需要一个能根据词来查询其词性的方法,代码如下:

三、模型训练

经过第二步的分词之后,就可以进行训练了。训练主要是调用word2vec相关的函数将词向量化,主要代码如下:

模型已经生成,我们可以调用模型来看一下具体某个词的词向量

是一个200维的向量。维度可以由我们定义。至此,模型已经训练好。下面进行测试。

四、模型测试

如果此时直接使用模型,效果和之前一样,我们可以利用已生成好的词性文件来进行优化。主要思路是当查找到与目标相似度较高的词时,查询其词性,如果是想要的词性,就输出,不是就抛弃。具体代码如下:

本次求与“苏大强”相似度最高的10个词,运行结果如下

效果确实好多了。但是发现这些词没有文章中的主人公。查看苏大强与蔡根花的相似度:

运行结果如下:

苏大强与蔡根花的相似度明明很高,为什么求相似度top10时没有她。

还有其他主人公的相似度比上面的词相似度低一些,但是要更加的有用。如何能显示出更多有效的词呢。

后来经过排查,发现是因为“蔡根花”词性为空,所以在进行优化时,就把本文的人名优化去了,原因是jieba没有把这些词当做人名(nr)。

五、模型优化

针对这种情况,我们有两种解决方式,第一种是将这些人名的词性加入到词性文件,这样在查找时,就可以找到。第二种方式是直接寻找指定词与目标词的相似度。第二种目标性更强,下面我们直接用用户字典里的词作为与目标“苏大强”的相似度比较。

还是不太好看,排序输出后为:

从结果中可以看出,苏大成与蔡根花的相似度最高,蔡根花是苏大成的保姆,也是他的 “宝贝”,也挺符合故事情节的。

zhi

chi

zuo

zhe


长按扫码鼓励作者

点 击 投 稿



热 门 推 荐

用Python制作一个猫咪小秒表

介绍几款 Python 类型检查工具

用Python挖掘网易云音乐的热门歌单

推荐Python中文社区旗下的几个服务类公众号


▼ 长按扫码上方二维码或点击下方阅读原文

免费成为社区注册会员,会员可以享受更多权益

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31143
 
929 次点击