利用Sentiwordnet进行文本情感分析(简)

利用Sentiwordnet进行文本情感分析(简)

  • 1. 简介
  • 2. 下载NLTK包和它内部的词典
  • 3. 全过程代码详解
    • 1. 导入所需包,函数
    • 2. 分词
    • 3. 计数,给予词性标签
    • 4. 计算单词得分
  • 4. 完整代码(函数形式)

1. 简介

利用python中的NLTK包对英文进行分词,得到词频,标注词性,得到单词得分,最后可再根据实际情况计算文本情感分。注:分词只能得到一个个单词,不能得到短语。(我的第一篇blog!!!)

2. 下载NLTK包和它内部的词典

  • 使用pip下载nltk
    pip install nltk在这里插入图片描述

  • 利用nltk下载词典
    先在代码行输入:

    import nltk
    nltk.download()
    

    弹出下载框,可选all,一般下载book就够用了,不够的话在运行代码时会弹出错误提示你缺什么,再下载也可以。在这里插入图片描述

3. 全过程代码详解

1. 导入所需包,函数

import pandas as pd #著名数据处理包
import nltk 
from nltk import word_tokenize #分词函数
from nltk.corpus import stopwords #停止词表,如a,the等不重要的词
from nltk.corpus import sentiwordnet as swn #得到单词情感得分
import string #本文用它导入标点符号,如!"#$%& 

2. 分词

  • 导入文本

    text = 'Nice quality, fairly quiet, nice looking and not too big.  I bought two.'
    
  • 载入停止词

    stop = stopwords.words("english") + list(string.punctuation)
    >>> stop[:5]
    ['i', 'me', 'my', 'myself', 'we']
    
  • 根据停止词表分词

    >>>[i for i in word_tokenize(str(text).lower()) if i not in stop]
    ['nice', 'quality', 'fairly', 'quiet', 'nice', 'looking', 'big', 'bought', 'two']
    

``

3. 计数,给予词性标签

ttt = nltk.pos_tag([i for i in word_tokenize(str(text[77]).lower()) if i not in stop])
>>> ttt
[('nice', 'JJ'), ('quality', 'NN'), ('fairly', 'RB'), ('quiet', 'JJ'), ('nice', 'JJ'), ('looking', 'VBG'), ('big', 'JJ'), ('bought', 'VBD'), ('two', 'CD')]
>>> word_tag_fq = nltk.FreqDist(ttt)
>>> word_tag_fq
FreqDist({('nice', 'JJ'): 2, ('quality', 'NN'): 1, ('fairly', 'RB'): 1, ('quiet', 'JJ'): 1, ('looking', 'VBG'): 1, ('big', 'JJ'): 1, ('bought', 'VBD'): 1, ('two', 'CD'): 1})
>>> wordlist = word_tag_fq.most_common()
>>> wordlist
[(('nice', 'JJ'), 2), (('quality', 'NN'), 1), (('fairly', 'RB'), 1), (('quiet', 'JJ'), 1), (('looking', 'VBG'), 1), (('big', 'JJ'), 1), (('bought', 'VBD'), 1), (('two', 'CD'), 1)]

查看’JJ’, 'NN’等所代表的的意思。如NN为noun, common,即常见名词。

nltk.help.upenn_tagset()

最后存入dataframe中:

key = []
part = []
frequency = []
for i in range(len(wordlist)):key.append(wordlist[i][0][0])part.append(wordlist[i][0][1])frequency.append(wordlist[i][1]
textdf = pd.DataFrame({'key':key,'part':part,'frequency':frequency},columns=['key','part','frequency'])

在这里插入图片描述

4. 计算单词得分

  • Sentiwordnet内部分函数解释

    >>> list(swn.senti_synsets('great'))
    [SentiSynset('great.n.01'),
    SentiSynset('great.s.01'),
    SentiSynset('great.s.02'),
    SentiSynset('great.s.03'),
    SentiSynset('bang-up.s.01'),
    SentiSynset('capital.s.03'),
    SentiSynset('big.s.13')]
    

    其中,n为名词,v为动词,a和s为形容词,r为副词。可见,一个单词可有多种词性,每种词性也可有多种意思

    >>> str(swn.senti_synset('good.s.06'))
    '<good.a.01: PosScore=0.75 NegScore=0.0>'
    

``

  单词得分

    >>> swn.senti_synset('good.a.01').pos_score()0.75

  这里得到的是积极得分(postive)

  • 编码转换(因为前面分词和后面的词性标签不太一样)
    且这里只对名词n,动词v,形容词a,副词r进行了筛选。

    n = ['NN','NNP','NNPS','NNS','UH']
    v = ['VB','VBD','VBG','VBN','VBP','VBZ']
    a = ['JJ','JJR','JJS']
    r = ['RB','RBR','RBS','RP','WRB']for i in range(len(textdf['key'])):z = textdf.iloc[i,1]if z in n:textdf.iloc[i,1]='n'elif z in v:textdf.iloc[i,1]='v'elif z in a:textdf.iloc[i,1]='a'elif z in r:textdf.iloc[i,1]='r'else:textdf.iloc[i,1]=''
    

``

  • 计算并合并单词得分到textdf数据框中

    score = []
    for i in range(len(textdf['key'])):m = list(swn.senti_synsets(textdf.iloc[i,0],textdf.iloc[i,1]))s = 0ra = 0if len(m) > 0:for j in range(len(m)):s += (m[j].pos_score()-m[j].neg_score())/(j+1)ra += 1/(j+1)score.append(s/ra)else:score.append(0)
    textdf = pd.concat([textdf,pd.DataFrame({'score':score})],axis=1)
    

    因为一个单词可有多种词性,且每种词性可能有多种意思,故对该单词在该词性内所有的分数进行加权计算,得到最终该单词得分。在sentiwordnet中,一个单词一种词性内意思的顺序越靠前,该意思越能代表该单词的意思。我们赋予第一个意思1的权重,第二个1/2的权重,依此类推。其中,每个意思的分数为积极分减消极分。

    在这里插入图片描述

  • 最后可根据实际情况计算文本情感的分。如把所有单词的得分加和记为文本得分

4. 完整代码(函数形式)

直接调用函数即可得到得分数据框。(只有上文说到的四种词性)

def text_score(text):#create单词表#nltk.pos_tag是打标签ttt = nltk.pos_tag([i for i in word_tokenize(str(text).lower()) if i not in stop])word_tag_fq = nltk.FreqDist(ttt)wordlist = word_tag_fq.most_common()#变为dataframe形式key = []part = []frequency = []for i in range(len(wordlist)):key.append(wordlist[i][0][0])part.append(wordlist[i][0][1])frequency.append(wordlist[i][1])textdf = pd.DataFrame({'key':key,'part':part,'frequency':frequency},columns=['key','part','frequency'])#编码n = ['NN','NNP','NNPS','NNS','UH']v = ['VB','VBD','VBG','VBN','VBP','VBZ']a = ['JJ','JJR','JJS']r = ['RB','RBR','RBS','RP','WRB']for i in range(len(textdf['key'])):z = textdf.iloc[i,1]if z in n:textdf.iloc[i,1]='n'elif z in v:textdf.iloc[i,1]='v'elif z in a:textdf.iloc[i,1]='a'elif z in r:textdf.iloc[i,1]='r'else:textdf.iloc[i,1]=''#计算单个评论的单词分数score = []for i in range(len(textdf['key'])):m = list(swn.senti_synsets(textdf.iloc[i,0],textdf.iloc[i,1]))s = 0ra = 0if len(m) > 0:for j in range(len(m)):s += (m[j].pos_score()-m[j].neg_score())/(j+1)ra += 1/(j+1)score.append(s/ra)else:score.append(0)return pd.concat([textdf,pd.DataFrame({'score':score})],axis=1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9362.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新微信小程序抓包方法

一、安装 fiddler 官网下载&#xff1a;https://www.telerik.com/download/fiddler 二、配置 打开fiddler tools-> options&#xff0c;genneral: 全选 https: connections: 配置代理地址 gateway: 三、打开电脑端小程序 退出微信&#xff0c;登录微信时设置代理 打开小程序…

抓包微信小程序openid的教程

一.所需设备 windows 电脑 二、步骤 1、下载安装Charles&#xff0c;官网版有30天试用。地址&#xff1a;https://www.charlesproxy.com/download/ 或者自行找方法安装该软件即可。 2、打开Charles软件&#xff0c;同时打开微信电脑版并登录。 3、设置 Charles 开启https抓…

微信小程序中英文国际版

1.在main.js中引入vue-i18n //引入中英文 import VueI18n from vue-i18n Vue.use(VueI18n); const i18n new VueI18n({locale: zh, // 默认选择的语言silentFallbackWarn: true, //在初始化VueI18n实例时禁止设置这些警告&#xff08;同时保留那些警告给定键完全没有翻译的警…

微信聊天小程序——(二、账号的注册与登录)

具体效果&#xff1a; 目录 二、账号的注册与登录 步骤一、获取用户信息 步骤二、用户输入账号密码&#xff08;在注册页面中&#xff09; 步骤三、将获取到的值放到我们的数据库中&#xff08;在注册页面中&#xff09; 步骤四、登录的页面逻辑 步骤五、登录页面的实现 …

weixin小程序和公众号抓包方法分享

文章目录 前言一、工具准备及相关设置二、burp抓包演示三、扩展操作四、小结 前言 由于在工作中涉及了微信小程序的渗透测试&#xff0c;参考了一些文章&#xff0c;感觉代理的设置大都太麻烦&#xff0c;甚至还有人用模拟器或者手机登陆微信再抓内网IP的数据包&#xff0c;按…

微信小程序流量主被封和暂停搜索?

9月26号毫无征兆的收到微信广告助手的通知&#xff1a; 然后进入小程序后台&#xff0c;提示如下&#xff1a; 小程序广告组件关闭原因&#xff1a; 流量主通过违法违规等不正常手段获取流量&#xff0c;包括但不限于通过头像、名称、简介混淆正常搜索结果&#xff0c;影响用…

微信小程序功能被封禁怎么办(附上解决方案)

1.首先要明确是被封禁还是警告&#xff0c;警告的话在规定时间内整改就可以恢复&#xff0c;走的是警告申诉通道&#xff0c;封禁的话走的是封禁申诉通道 如果封禁了之后走警告申诉通过了申诉也是不给解封的&#xff0c;只能封禁走封禁申诉&#xff0c;警告走警告申诉。 2.在修…

chatgpt赋能python:Python中归一化处理——实现数据预处理的重要手段

Python中归一化处理 —— 实现数据预处理的重要手段 随着大数据时代的到来&#xff0c;越来越多的公司和机构开始注重数据的价值。不过&#xff0c;数据的价值是在经过处理后才会显现出来的。因此&#xff0c;数据预处理成为了数据分析过程中极为关键的一环。而在数据预处理中…

chatgpt赋能python:Python中数据清洗:让数据更优秀

Python中数据清洗&#xff1a;让数据更优秀 数据清洗&#xff08;Data Cleaning&#xff09;是数据分析过程中不可或缺的一个环节&#xff0c;它指的是通过一系列技术和方法&#xff0c;对数据中的不正确、不完整、不一致等各种问题进行处理和修正&#xff0c;使数据更加规范、…

chatgpt赋能python:Python数据建模:从数据预处理到机器学习建模

Python数据建模&#xff1a;从数据预处理到机器学习建模 Python已经成为了数据建模与分析的主要工具之一&#xff0c;因为它的语法简单易懂&#xff0c;有许多数据科学库可以使用&#xff0c;支持各种各样的数据预处理和建模技术。在本文中&#xff0c;我们将重点介绍使用Pyth…

chatgpt赋能python:Python数据预处理:优化数据分析的重要步骤

Python数据预处理&#xff1a;优化数据分析的重要步骤 在数据分析过程中&#xff0c;数据预处理是非常重要的步骤。在这个阶段&#xff0c;我们可以清洗、转换和整理数据&#xff0c;以便更好地进行数据分析和建模。Python是一个强大的工具&#xff0c;可以帮助我们优化数据预…

chatgpt赋能python:Python数据预处理:为机器学习和数据分析做好准备

Python数据预处理&#xff1a;为机器学习和数据分析做好准备 数据预处理是数据科学界的第一步。在这个步骤中&#xff0c;数据被清理、处理、格式化和转换&#xff0c;以便更好地使用。Python是数据科学家和机器学习工程师常用的一种工具&#xff0c;因为Python有许多库和框架…

chatgpt赋能python:Python数据集预处理指南:从混乱到有序

Python 数据集预处理指南&#xff1a;从混乱到有序 在数据分析和机器学习领域&#xff0c;数据预处理是至关重要的一步。预处理的目的是将不规则、混乱的数据转化为适合分析的数据格式&#xff0c;使得数据能够按照一定的规则进行处理和分析。本文将介绍 Python 数据集预处理的…

chatgpt赋能python:Python数据预处理指南

Python数据预处理指南 在数据分析和机器学习中&#xff0c;预处理数据是一个非常重要的步骤。Python作为数据分析和机器学习领域广泛应用的语言之一&#xff0c;提供了许多工具和库来进行数据预处理。下面介绍几种常见的Python数据预处理技术。 数据清洗 在数据预处理的过程…

chatgpt赋能python:Python数据预处理技术与实践

Python数据预处理技术与实践 数据预处理是数据挖掘和机器学习的关键步骤。Python作为一种流行的编程语言&#xff0c;在数据处理方面具有一定的优势。本文将介绍Python中常用的数据预处理技术&#xff0c;并提供一些实践方法。 数据预处理的定义 数据预处理是指在进行数据分…

chatgpt赋能Python-numpy数据预处理

Numpy数据预处理综述 介绍 Numpy是Python中最流行的数学库之一&#xff0c;可以用于高效的处理大型数据。Numpy提供了各种强大的数据结构和函数&#xff0c;使得数据分析和处理变得更加容易和直观。本文将介绍numpy中的一些数据预处理技术&#xff0c;包括数据清洗、缩放、归…

超全面 pandas 数据预处理+数据概览 处理技巧整理(持续更新版)

这篇文章主要是整理下使用pandas的一些技巧&#xff0c;因为经常不用它&#xff0c;这些指令忘得真的很快。前段时间在数模美赛中已经栽过跟头了&#xff0c;不希望以后遇到相关问题的时候还去网上查&#xff08;主要是太杂了&#xff09;。可能读者跟我有一样的问题&#xff0…

chatgpt赋能python:Python数据预处理的方法

Python数据预处理的方法 数据预处理是数据分析、挖掘及机器学习应用中非常重要的一环。在数据预处理过程中&#xff0c;数据清洗和数据转换是必要的步骤。本文将介绍如何使用Python进行数据预处理工作&#xff0c;让我们一起来了解下。 数据清洗 数据清洗是数据分析中最重要…

chatgpt赋能python:Python数据预处理实验报告

Python数据预处理实验报告 数据预处理是数据挖掘过程中非常重要的一步&#xff0c;因为它能够帮助我们更好地理解数据、减少噪音、规范化数据格式。Python在数据预处理方面非常强大&#xff0c;很多开源库可以帮助我们自动化地完成各种数据清洗、格式转换以及特征提取等任务。…

chatgpt赋能python:Python数据预处理

Python数据预处理 什么是数据预处理 数据预处理是数据分析的一项基础性工作&#xff0c;它包括了数据的清洗、变换、整合等一系列的操作&#xff0c;旨在让原始数据变得更容易分析和应用。数据预处理可以帮助我们发现数据中的异常值、缺失值、重复值等&#xff0c;处理它们并…