1.将爬虫获取的评论区内容进行情感分析:
import jieba
import pandas as pd
from snownlp import SnowNLP
# 读取爬取到的微博评论数据
data = pd.read_csv('E:\爬虫\微博清单_郑州暴雨_前10页.csv', encoding='gbk')
# 对评论内容进行分词处理
def tokenize(text):
return ' '.join(jieba.cut(text))
data['tokenized_comments'] = data['微博内容'].apply(tokenize)
# 使用SnowNLP库进行情感分析
def get_sentiment(text):
return SnowNLP(text).sentiments
data['sentiment'] = data['tokenized_comments'].apply(get_sentiment)
# 根据情感分析结果,将评论分为正面、负面和中性三类
def categorize_sentiment(sentiment):
if sentiment > 0.6:
return '正面'
elif sentiment < 0.4:
return '负面'
else:
return '中性'
data['category'] = data['sentiment'].apply(categorize_sentiment)
# 统计各类别评论数量
category_counts = data['category'].value_counts()
# 输出各类别评论数量
print(category_counts)
运行结果:
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\林夕\AppData\Local\Temp\jieba.cache
Loading model cost 0.403 seconds.
Prefix dict has been built successfully.
category
正面 50
负面 25
中性 9
Name: count, dtype: int64
2.爬虫加分词,生成词云图。
import requests
from bs4 import BeautifulSoup
import jieba
from pyecharts.charts import WordCloud
url = "https://movie.douban.com/subject/30166972/comments?sort=time&status=P"
response = requests.get(url)
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"}
response = requests.get(url,headers = headers)
html =response.text
soup = BeautifulSoup(html,"lxml")
content_all = soup.find_all(class_ ="short")
wordlist = []
count = 0 # 添加计数器
limit = 500 # 设置收集词条的数量限制
for content in content_all:
if count >= limit: # 如果达到限制,停止收集
break
contentString = content.string
words = jieba.lcut(contentString)
wordlist+=words
count += len(words) # 更新计数器
letter = {}
for word in wordlist:
if len(word) >1:
if word not in letter.keys():
letter[word] = 1
else:
letter[word] = letter[word] + 1
wd= WordCloud()
wd.add(series_name="",data_pair=letter.items(),word_size_range=[20,50])#表示词的大小在12到50之间随机选择。
wd.render("woainicloud.html")
结果: 
3. 情感分析
import nltk
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 示例文本数据和对应的情感标签
data = [
("这个电影很好看", "正面"),
("这部电影真的很糟糕", "负面"),
("我很喜欢这个产品", "正面"),
("这个产品真的很差", "负面"),
("今天的天气很好", "正面"),
("今天天气很差", "负面")
]
# 将文本数据分为特征(X)和标签(y)
X, y = zip(*data)
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# 创建一个TF-IDF向量化器,用于将文本转换为数值特征
vectorizer = TfidfVectorizer()
# 创建一个朴素贝叶斯分类器
classifier = MultinomialNB()
# 使用管道将向量化器和分类器组合在一起
model = make_pipeline(vectorizer, classifier)
# 使用训练数据拟合模型
model.fit(X_train, y_train)
# 对测试数据进行预测
y_pred = model.predict(X_test)
# 计算预测准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
# 使用模型对新文本进行情感分析
new_text = "这个产品真的很好"
predicted_label = model.predict([new_text])[0]
print("Predicted sentiment:", predicted_label)
运行结果:
Accuracy: 0.5
Predicted sentiment: 正面
导入的库解释:
1. nltk:Natural Language Toolkit(自然语言处理工具包),是一个用于处理人类语言数据的软件库。在上述代码中,nltk库主要用于分词和停用词的处理。
2. sklearn.feature_extraction.text.TfidfVectorizer:TF-IDF向量化器,用于将文本数据转换为数值特征。在上述代码中,TfidfVectorizer用于将文本数据转换为TF-IDF特征向量。
3. sklearn.naive_bayes.MultinomialNB:多项式朴素贝叶斯分类器,用于进行文本分类。在上述代码中,MultinomialNB用于训练模型并进行预测。
4. sklearn.pipeline.make_pipeline:管道函数,用于将多个数据处理步骤组合在一起。在上述代码中,make_pipeline用于将向量化器和分类器组合在一起,形成一个完整的处理流程。
5. sklearn.model_selection.train_test_split:数据集划分函数,用于将数据集划分为训练集和测试集。在上述代码中,train_test_split用于将数据集划分为训练集和测试集。
6. sklearn.metrics.accuracy_score:准确率计算函数,用于计算模型的预测准确率。在上述代码中,accuracy_score用于计算模型在测试集上的预测准确率。