情感分析
自然语言处理(NLP)
- 将自然语言(文本)转化为计算机程序更容易理解的形式
- 预处理得到的字符串 -> 向量化
- 经典应用
- 情感分析
- 文本相似度
- 文本分类
简单的情感分析
情感字典(sentiment dictionary)
- 人工构造一个字典,如:
like
-> 1,good
-> 2,bad
-> -1,terrible
-> -2 - 根据关键词匹配
- 人工构造一个字典,如:
如 AFINN-111: http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6010,虽简单粗暴,但很实用
问题:
遇到新词,特殊词等,扩展性较差
使用机器学习模型,nltk.classify
案例:使用机器学习实现
# 简单的例子
import nltk
from nltk.stem import WordNetLemmatizer
from nltk.corpus import stopwords
from nltk.classify import NaiveBayesClassifier
text1 = 'I like the movie so much!'
text2 = 'That is a good movie.'
text3 = 'This is a great one.'
text4 = 'That is a really bad movie.'
text5 = 'This is a terrible movie.'
def proc_text(text):
"""
预处处理文本
"""
# 分词
raw_words = nltk.word_tokenize(text)
# 词形归一化
wordnet_lematizer = WordNetLemmatizer()
words = [wordnet_lematizer.lemmatize(raw_word) for raw_word in raw_words]
# 去除停用词
filtered_words = [word for word in words if word not in stopwords.words('english')]
# True 表示该词在文本中,为了使用nltk中的分类器
return {word: True for word in filtered_words}
# 构造训练样本
train_data = [[proc_text(text1), 1],
[proc_text(text2), 1],
[proc_text(text3), 1],
[proc_text(text4), 0],
[proc_text(text5), 0]]
# 训练模型
nb_model = NaiveBayesClassifier.train(train_data)
# 测试模型
text6 = 'That is a bad one.'
print(nb_model.classify(proc_text(text5)))