2024-06-29|閱讀時間 ‧ 約 27 分鐘

[Python][自然語言]NLTK 實現電影評論情感分析

情感分析是一種自然語言處理技術,用於自動識別和分析文本中情感傾向,通常是正向負向中性

我們可以使用 NLTK 來實現一個基於單純貝斯分類器的情感分析模型。

以下是一個簡單的情感分析示例:

步驟一:準備訓練和測試數據

首先,我們需要一些帶有情感標籤的文本數據集來訓練我們的分類器。

這裡我們使用 NLTK 內置的電影評論數據集 movie_reviews,它包含了正面和負面的電影評論。

import nltk
from nltk.corpus import movie_reviews

# 準備訓練資料集
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]

# 打亂資料順序以增加模型的泛化能力
import random
random.shuffle(documents)

# 準備特徵集
all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_features = list(all_words.keys())[:2000] # 選取最常見的2000個單詞作為特徵

def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains({})'.format(word)] = (word in document_words)
return features

featuresets = [(document_features(d), c) for (d,c) in documents]
train_set, test_set = featuresets[100:], featuresets[:100] # 分割訓練集和測試集

步驟二:訓練情感分析模型

接下來,我們使用單純貝氏分類器(Naive Bayes classifier)來訓練情感分析模型。

from nltk.classify import NaiveBayesClassifier

# 訓練分類器
classifier = NaiveBayesClassifier.train(train_set)

# 查看模型在測試集上的準確率
print('Accuracy:', nltk.classify.accuracy(classifier, test_set))

輸出

Accuracy: 0.78

步驟三:使用模型進行情感分析

最後,我們可以使用訓練好的模型來對新的文本進行情感分析。

def sentiment_analysis(text):
tokens = nltk.word_tokenize(text)
features = document_features(tokens)
return classifier.classify(features)

# 測試情感分析模型
review1 = "This movie is great and fantastic!"
review2 = "I disliked this film. It was boring."

print("Review 1:", sentiment_analysis(review1))
print("Review 2:", sentiment_analysis(review2))

輸出

Review 1: neg 
Review 2: neg

儲存模型

我們將使用 NLTK 提供的 pickle 模組來匯出訓練好的分類器模型。

import pickle

# 指定要保存模型的文件名
model_file = 'sentiment_classifier.pkl'

# 匯出模型
with open(model_file, 'wb') as f:
pickle.dump(classifier, f)

載入模型使用

import pickle

# 加載模型
with open(model_file, 'rb') as f:
loaded_classifier = pickle.load(f)

# 使用加載的模型進行情感分析
def sentiment_analysis(text):
tokens = nltk.word_tokenize(text)
features = document_features(tokens)
return loaded_classifier.classify(features)

# 測試加載的情感分析模型
review1 = "This movie is great and fantastic!"
review2 = "I disliked this film. It was boring."

print("Review 1:", sentiment_analysis(review1))
print("Review 2:", sentiment_analysis(review2))







分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.