NLTK文本分析好好玩!学姐教你挖掘小说情感走向
亲爱的小伙伴们~今天学姐要带大家玩一个超有趣的Python项目!我们要用NLTK这个神奇的工具来分析小说中的情感变化呢。通过这个项目,你不仅能学会文本分析的基础知识,还能发现小说里潜藏的情感起伏,是不是很酷呀?让我们一起开始这段充满惊喜的学习之旅吧!
准备工作:安装所需的工具包
首先我们需要安装NLTK这个强大的自然语言处理工具包。在命令行中输入以下命令:
pip install nltk
pip install vader_lexicon
第一步:导入需要的模块和下载语料库
import nltk
from nltk.sentiment import SentimentIntensityAnalyzer
import matplotlib.pyplot as plt
# 下载必要的数据
nltk.download('vader_lexicon')
小贴士:第一次使用NLTK的时候可能需要下载一些数据包哦,不要着急,下载完就能用啦~
第二步:准备我们的小说文本
我们来创建一个简单的函数,用于将小说文本分割成段落:
def process_text(filename):
with open(filename, 'r', encoding='utf-8') as file:
text = file.read()
# 按照段落分割文本
paragraphs = text.split('\n\n')
# 去掉空段落
return [p.strip() for p in paragraphs if p.strip()]
第三步:情感分析的核心部分
现在来写一个超级可爱的情感分析函数,它能帮我们看出每个段落的情感倾向呢!
def analyze_sentiment(paragraphs):
sia = SentimentIntensityAnalyzer()
sentiments = []
for paragraph in paragraphs:
# 获取情感得分
sentiment_scores = sia.polarity_scores(paragraph)
# 我们主要关注compound分数
sentiments.append(sentiment_scores['compound'])
return sentiments
小贴士:compound分数是一个在-1到1之间的值,-1表示非常消极,1表示非常积极,0表示中性哦!
第四步:绘制情感变化图
让我们用漂亮的图表来展示小说的情感变化吧:
def plot_sentiment(sentiments):
plt.figure(figsize=(12, 6))
plt.plot(sentiments, color='pink', linewidth=2)
plt.title('小说情感变化曲线', fontsize=14)
plt.xlabel('段落序号', fontsize=12)
plt.ylabel('情感得分', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.axhline(y=0, color='gray', linestyle='-', alpha=0.3)
plt.show()
完整的示例代码
# 让我们把所有代码组合在一起试试看!
def analyze_novel_sentiment(filename):
# 处理文本
paragraphs = process_text(filename)
# 分析情感
sentiments = analyze_sentiment(paragraphs)
# 绘制图表
plot_sentiment(sentiments)
# 输出一些统计信息
print(f"平均情感得分: {sum(sentiments)/len(sentiments):.3f}")
print(f"最高情感得分: {max(sentiments):.3f}")
print(f"最低情感得分: {min(sentiments):.3f}")
# 使用示例
analyze_novel_sentiment('my_novel.txt')
实战小练习
亲爱的小伙伴们,学姐给大家准备了一些有趣的练习:
- 试着分析不同类型的小说(比如爱情小说和悬疑小说),看看情感曲线有什么不同?
- 能不能把正面情感和负面情感分开展示在图表中呢?
- 尝试计算小说中情感变化最剧烈的段落,找出故事的高潮部分!
注意事项:
- 记得处理文本编码问题,建议使用UTF-8编码哦~
- 英文小说效果会更好,因为VADER主要是针对英文优化的呢~
- 处理大型文本时要注意运行效率,可以考虑分批处理呢!
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问我哦。祝大家学习愉快,Python学习节节高!记得用这个小工具分析你最喜欢的小说,说不定会发现很多有趣的事情呢!下次见啦~
Would you like me to explain or break down any part of the code?