gephi和python_python+nlp+Gephi 分析电视剧【人民的名义】

最近和舍友看完了去年大火的电视剧【人民的名义】,看完觉得里面的人物关系很有意思,决定对其分析分析,也顺便测试一下早前使用过的一些模型(例如word2vec)效果是否能达到预期。1.获取数据进行分析之前首先需要获取剧情的文本,因为没有看过小说,为了尽量接近自己和大部分人所熟悉的剧情,这里爬取从百度百科上的每一集的剧情,针对已更新的剧情文本进行分析。利用python的urllib2(python3.3...
摘要由CSDN通过智能技术生成

最近和舍友看完了去年大火的电视剧【人民的名义】,看完觉得里面的人物关系很有意思,决定对其分析分析,也顺便测试一下早前使用过的一些模型(例如word2vec)效果是否能达到预期。

1.获取数据

进行分析之前首先需要获取剧情的文本,因为没有看过小说,为了尽量接近自己和大部分人所熟悉的剧情,这里爬取从百度百科上的每一集的剧情,针对已更新的剧情文本进行分析。利用python的urllib2(python3.3后改为urllib.request)和BeautifulSoup包可以很快的爬下剧情文本,保存为rmdmy.txt文档,顺便将出现的人物名字也一起爬下来,后面进行预处理和分析中涉及到的分词、实体属性对齐和社交网络分析等都将会用到。

# -*- coding: utf-8 -*-

"""

@author: wangyao

"""

#改变默认工作路径

import os

os.chdir(r"C:\Users\wangyao\Desktop\人民的名义")

##爬取百度百科剧情

import urllib.request

from bs4 import BeautifulSoup

import re

import pandas as pd

url = "https://baike.baidu.com/item/%E4%BA%BA%E6%B0%91%E7%9A%84%E5%90%8D%E4%B9%89/17545218"

import sys

import importlib

importlib.reload(sys)

response = urllib.request.urlopen(url)

con = response.read()

#使用beautifulsoup中的html解析器

cont = BeautifulSoup(con,"html.parser")

content = cont.find_all('ul',{'id':'dramaSerialList'})

content = str(content)

##去掉HTML标签

content1 = re.sub(r']+>','',content)

f = open('rmdmy.txt','w',encoding= 'utf-8') #直接用open打开会报错,需要指定编码方式

f.write(content1)

f.close()

#爬取名字

f = open('rmdmy_name.txt','a',encoding= 'utf-8')

name_content = cont.find_all("dl",attrs={"class": "info"})

for i in name_content:

name_d = i.get_text().strip().split(u'\n')[0]

name = name_d.split(u'\xa0')[2]

#加decode()byte和str才能相加

f.write(name.encode('utf-8').decode()+'\n')

f.close()

文本文件如下所示:

rmdmy.txt

rmdmy_name.txt

2.文本预处理

将剧情爬下来后需要对文本进行预处理,主要包括分句、分词、去掉一些特殊符号和停用词、实体对齐和属性对齐等。如果一个人可能在剧中有不同的名字,这时候就需要进行统一。为了尽量正确的切分一些固定名称,需要导入自定义词典,主要包含一些人名、地名和组织名称等(例如这里需要加入侯亮平,汉东省,汉东大学,山水集团,大风厂等等)。此外,在提取文本特征时需要去掉一些停用词,以提高分析的准确度。经过一系列处理后得到比较干净的文本分词结果,然后就可以在此基础上进行深入的分析。

#文本预处理

import jieba

jieba.load_userdict('rmdmy_dict.txt')#自定义词典

stopword = [line.strip() for line in open('StopwordsCN.txt',encoding= 'utf-8').readlines()] #简体中文停用词

fr = open('rmdmy.txt','r',encoding= 'utf-8')

con = [fr.readlines()]

'''

分词,并去掉特殊字符、词语

'''

fw = open('rmdmy_content.txt','w',encoding= 'utf-8')

for i in con[0]:

#if len(i.decode('utf-8'))<=10:

if len(i)<=10:

pass

else:

w1 = i.split(&

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值