一、数据抓取
利用python软件,抓取豆瓣网上关于《向往的生活》的影视短评,进行网页爬虫,爬虫代码如下:import requests
import re
cookies=[cookie1,cookie2,cookie3]
url1='https://movie.douban.com/subject/26873657/comments?start=' #《向往的生活 第1季》豆瓣短评网址
url2='https://movie.douban.com/subject/27602222/comments?start='
#《向往的生活 第2季》豆瓣短评网址
url3='https://movie.douban.com/subject/30441625/comments?start='
#《向往的生活 第3季》豆瓣短评网址
urls=[url1,url2,url3]
comments=[]
for i in range(0,3):
print(urls[i])
for n in range(0,500, 20):
#获取目标网页
url = urls[i] +str(n) + '&limit=20&sort=new_score&status=P'
# print(url)
# print(n)
#打开目录,并获取内容
html =requests.get(url, cookies=cookies[i])
# print(html)
#print(html.text)
#筛选数据
data =re.findall('(.*?)', html.text)
for j inrange(len(data)):
comments.append(data[j])
print(comments)
with open('E:/热心市民与好好先生/me/毕设/数据/data.txt','w',encoding='utf-8')as f:
#f.writelines(comments)
for comment incomments:
f.write(comment+"\n")
由于豆瓣网设有爬虫限制频率,所以抓取《向往的生活》三季的1468条数据作为训练数据集,并保存为txt文件。训练集的部分数据如下:
部分训练集
二、数据预处理
由于原始的影评文本中可能存在与情感分析任务无关的内容以及软件无法识别的特殊字符表情,因此要对文本进行预处理操作。数据预处理分为中文分词和去除停用词两个步骤。
(1)中文分词
中文分词就是将一整句中文文本,经过切分形成单个单独词语的过程,本文采取的中文分词工具为jieba分词,词与词之间用空格隔开。import jieba #Python载入包
def preHandler(sentence):
seg_list=jieba.cut(sentence)
f_stop=open('stopwords.txt','r')
try:
f_stop_text=f_stop.read()
finally:
f_stop.close()
f_stop_seg_list=f_stop_text.split('\n')
words=[]
for word inseg_list:
ifnot(word.strip() in f_stop_seg_list):
words.append(word)
return words
fw=open('E:/热心市民与好好先生/me/毕设/数据/predata.txt','w', encoding='utf-8')
with open('E:/热心市民与好好先生/me/毕设/数据/data.txt','r', encoding='utf-8') as f:
for line inf.readlines():
line=line.strip()
word=preHandler(line)
fw.write("".join(i for i in word)+"\n")
fw.close()
(2)去除停用词
为有效提高运行时间,节省储存空间,我们将采取去除停用词的方法,本文采取的停用词都是感情色彩较弱或不具有感情色彩的词汇。数据在进行上述两个步骤之后,形成的txt文件部分内容如下:
数据预处理部分结果
三、描述性统计
将预处理得到的数据导入到Python中,手动去除几个出现频率高但不包含情感的词汇后,把文本中出现频率较高的关键词,在视觉效果上给予突出,形成关键词云层。绘制词云图Python代码如下:def random_color_func(word=None, font_size=None,position=None, orientation=None, font_path= None, random_state=None):
h = randint(0, 0)
s = int(0 * 0 /255.0)
l = int(0 *float(randint(60, 120)) / 255.0)
return"hsl({}, {}%, {}%)".format(h, s, l)
with open(r'predata.txt','r',encoding="utf-8") asfile1:
content ="".join(file1.readlines())
images = Image.open("ci.png") #读取背景图片,
maskImages = np.array(images)
wc = WordCloud(font_path="msyh.ttc",
background_color="white",
mask=maskImages,
max_words=1000,
max_font_size=300,
#color_func=random_color_func
).generate(content)
plt.imshow(wc)
plt.axis("off")
wc.to_file('laomao.png')
plt.show()
文本评论中“喜欢”、“综艺”和“生活”属于用户共同的话题,文字越大表明用户的情感越强烈,综合以上信息,可得大多数人认为《向往的生活》这一综艺是好看的,大多数用户是喜欢的,节目中的大华也得到了一致好评。但词云图中也出现了“抄袭”、“尴尬”这些话题,说明有一部分评论者认为节目存在抄袭现象,相处模式比较尴尬,这就为创作者提供了很好的改进来源。创作者在节目原创部分有待提高,剧本和嘉宾相处模式可以更加流畅。
影视评论词云图