Python NLTK 情感分析不正确

news2024/12/25 22:24:34

在这里插入图片描述

1、问题背景

一位 Reddit 用户使用 Python 的 NLTK 库来训练一个朴素贝叶斯分类器以研究其他句子的情感,但是无论输入什么句子,分类器总是预测为正面。

2、解决方案

经过仔细检查,发现原始代码中的问题在于 wordList 为空。因此,需要将 wordList 赋值为从推文中提取的单词特征。修改后的代码如下:

wordList = getwordfeatures(getwords(tweets))
wordList = [i for i in wordList if not i in stopwords.words('english')]
wordList = [i for i in wordList if not i in customstopwords]

以下是完整的修复代码:

import nltk
import math
import re
import sys
import os
import codecs
reload(sys)
sys.setdefaultencoding('utf-8')

from nltk.corpus import stopwords

__location__ = os.path.realpath(
    os.path.join(os.getcwd(), os.path.dirname(__file__)))

postweet = __location__ + "/postweet.txt"
negtweet = __location__ + "/negtweet.txt"

customstopwords = ['band', 'they', 'them']

# Load positive tweets into a list
p = open(postweet, 'r')
postxt = p.readlines()

# Load negative tweets into a list
n = open(negtweet, 'r')
negtxt = n.readlines()

neglist = []
poslist = []

# Create a list of 'negatives' with the exact length of our negative tweet list.
for i in range(0, len(negtxt)):
    neglist.append('negative')

# Likewise for positive.
for i in range(0, len(postxt)):
    poslist.append('positive')

# Creates a list of tuples, with sentiment tagged.
postagged = zip(postxt, poslist)
negtagged = zip(negtxt, neglist)

# Combines all of the tagged tweets to one large list.
taggedtweets = postagged + negtagged

tweets = []

# Create a list of words in the tweet, within a tuple.
for (word, sentiment) in taggedtweets:
    word_filter = [i.lower() for i in word.split()]
    tweets.append((word_filter, sentiment))

# Pull out all of the words in a list of tagged tweets, formatted in tuples.
def getwords(tweets):
    allwords = []
    for (words, sentiment) in tweets:
        allwords.extend(words)
    return allwords

# Order a list of tweets by their frequency.
def getwordfeatures(listoftweets):
    # Print out wordfreq if you want to have a look at the individual counts of words.
    wordfreq = nltk.FreqDist(listoftweets)
    words = wordfreq.keys()
    return words

# Calls above functions - gives us list of the words in the tweets, ordered by freq.
print(getwordfeatures(getwords(tweets)))

wordList = getwordfeatures(getwords(tweets))
wordList = [i for i in wordList if not i in stopwords.words('english')]
wordList = [i for i in wordList if not i in customstopwords]

def feature_extractor(doc):
    docwords = set(doc)
    features = {}
    for i in wordList:
        features['contains(%s)' % i] = (i in docwords)
    return features

# Creates a training set - classifier learns distribution of true/falses in the input.
training_set = nltk.classify.apply_features(feature_extractor, tweets)
classifier = nltk.NaiveBayesClassifier.train(training_set)

print(classifier.show_most_informative_features(n=30))

while True:
    input = raw_input('ads')
    if input == 'exit':
        break
    elif input == 'informfeatures':
        print(classifier.show_most_informative_features(n=30))
        continue
    else:
        input = input.lower()
        input = input.split()
        print('\nWe think that the sentiment was ' + classifier.classify(feature_extractor(input)) + ' in that sentence.\n')

p.close()
n.close()

用户可以根据需要调整 customstopwords 列表以过滤掉不相关的词语。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LLM】-12-部署Langchain-Chatchat-0.3.x版本

目录 1、0.3与0.2的功能对比 2、0.3.x支持多种部署方式 2.3、源码安装 2.3.1、项目源码下载 2.3.2、创建conda环境 2.3.3、安装poetry 2.3.4、安装依赖库 2.3.5、项目初始化 2.3.6、初始化知识库 2.3.7、启动服务 2.3.8、配置说明 2.3.8.1、basic_settings.yaml 2…

一副穿戴甲背后,5万苏北宝妈如何硬控全球美甲潮流?

2019年的一天,张达在拼多多后台看到一个有趣的订单。“看姓名、联系方式,像表妹下的订单,但我的穿戴甲店才开第二天,她应该不可能知道。”张达回忆。 1993年出生的张达,是江苏东海县人,当地以水晶闻名。高…

达梦数据库的系统视图v$bufferpool

达梦数据库的系统视图v$bufferpool 达梦数据库系统视图V$BUFFERPOOL的主要作用是监控和管理数据库缓冲池的性能。通过查询V$BUFFERPOOL视图,用户可以获取以下关键信息: 缓存命中率:显示缓冲池的命中率,即从缓冲池中成功获取数据的…

嵌入式☞第二组(壹)

C语言基础: 循环的构成: 循环体 循环条件 循环的分类: 无限循环:程序设计中尽量避免无限循环。(程序中的无限循环必须可控) 有限循环:循环限定循环次数或者循环的条件。 当型循环的实现: while 语法 while(循…

【MySQL】索引 【上】 {没有索引的查询/磁盘/mysql与磁盘IO/初识索引}

文章目录 1.没有索引存在的问题2. 认识磁盘MySQL与存储MySQL与磁盘交互基本单位建立共识图解IO认识索引 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物…

初学Mybatis之缓存

所有的查询都需要连接数据库,而连接数据库消耗资源 我们可以把一次查询的结果暂时存在一个可以直接获取到的地方(内存:缓存) 我们再次查询相同数据的时候,直接走缓存,不走数据库 缓存:存在内…

3.5.1、查找和排序算法-算法介绍

算法特性 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。简单的说算法就是某个问题的解题思路,算法的五个重要特性如下: 有穷性。一个算法必须总是(对任何合法的输入值…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十二章 设备树常用of函数

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

NAS变身云盘管理大师:群晖部署AList全攻略!

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒🔑 AList功能简介🚀 快速部署📝 操作步骤🐳 Docker容器部署:灵活与强大📝 操作步骤📝 群晖部署🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在这个数字化时代,我们似乎都不可避免地拥有多个…

【数据结构】:大厂面试经典链表OJ题目详解

反转链表 206. 反转链表 - 力扣(LeetCode) 思路解透 本题就是通过不停地将最先的 head 节点位置的后一位插到最前面,完成链表的反转 本题需要两个节点变量 cur:其任务就是定位到原 head 节点位置的前一位,然后将自己…

列表(list)—python

一、列表的定义方式 列表内的每一个数据称为元素,列表以[ ]作为标识,列表内的每个元素之间用逗号隔开。 列表的基本语法如下: #字面量 [元素1,元素2,元素3,元素4,……]#定义变量 变量名称[元素1,元素2,元素3,元素4,……]#定义空列表 变量名…

Linux的防火墙

一、防火墙概述 防火墙是一种计算机硬件和软件的结合,使internet和intranet之间建立一个安全网关(Security Gateway),从而保护内网免受非法用户侵入的技术。 防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成。…

安防视频监控EasyCVR视频汇聚平台无法编辑设备通道信息的原因排查及解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…

ECharts - 坐标轴刻度数值处理

写图表时,Y轴的数值过大,不太可能直接展示,这时候就得简写了,或者百分比展示的也要处理,如下图: yAxis: {type: value,// Y轴轴线axisLine: { show: false }, // 刻度线axisTick: { show: false },// 轴刻度…

ECharts实现按月统计和MTBF统计

一、数据准备 下表是小明最近一年的旅游记录 create_datecity_namecost_money2023-10-10 10:10:10北京14992023-11-11 11:11:11上海29992023-12-12 12:12:12上海19992024-01-24 12:12:12北京1232024-01-24 12:12:12上海2232024-02-24 12:12:12广州5642024-02-24 12:12:12北京…

学习笔记之Java篇(0729)

p 数组 大纲知识点数组的概念数组的定义、四个特点数组的常见操作普通遍历、for-each遍历、java.util.Array类用法多维数组多维数组的内存结构、存储表格、Javabean和数组存储表格常见算法冒泡排序基础算法、冒泡排序优化算法、二分法查找(折半查找) 1、…

【JavaWeb】Filter

基本使用 使用了过滤器之后,要想访问web服务器上的资源,必须先经过滤器,过滤器处理完毕之后,才可以访问对应的资源。过滤器一般完成一些通用的操作,比如:登录校验、统一编码处理、敏感字符处理等。 使用操…

nginx 子路径映射配置

如果子路径转发到另一个服务器IP,配置如下,注意都要以“/”结尾。 #指定nginx进程数 worker_processes 1; pcre_jit on;events {# 连接数上限worker_connections 30000; }#http服务 http {server {listen 20012;# 监听的端口号server_name localho…

Spring IoC DI(笔记)

一.了解SpringIoC&DI 1.1IoC 通过前面的学习,我们知道了Spring是一个开源框架,他让我们的开发更加简单.他支持广泛的应用场 景,有着活跃而庞大的社区,这也是Spring能够长久不衰的原因,但是这个概念相对来说,还是比较抽象,我们用一句更具体的话来概…

纯原创【车牌识别】基于图像处理的车牌识别——matlab项目实战(含GUI界面)详解

摘要 车牌识别系统乃计算机视觉与模式识别技术于智能交通领域的重要研究课题之一。其作用在于从复杂背景里提取运动中的汽车牌照,进而识别出车牌号码。车牌识别技术在高速公路电子收费、日常停车场管理以及交通违章监控等场景得到广泛运用。它的问世对于维护交通安全…