自然语言处理入门2(做了几个小项目)

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用于计算模型在测试集上的预测准确率。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值