Python模块 自然语言处理NLP的情感分析
更新时间:2023-09-12自然语言处理和情感分析
自然语言处理(NLP)是一门多学科交叉的研究领域,旨在让计算机与人类的自然语言交流变得更加智能和自然。情感分析是NLP的一个重要应用,旨在识别和提取文本的情感、正面还是负面意义。在Python中,我们有一个强大的第三方NLP库NLTK,它提供了大量的NLP工具和自然语言学习资源,让我们能够轻松地对文本进行处理和分析。
#导入nltk库
import nltk
#下载语料库
nltk.download('stopwords')
分词和词干提取
分词(Tokenizer)是将一段文本分解为一个个词语的过程。在NLP中,我们通常将文本分解为词语,然后进行一些额外的操作,如去掉停用词和进行词干提取。在Python中,我们可以使用NLTK库来进行分词和词干提取。以下代码展示了如何对给定文本进行分词和词干提取。
#导入nltk库
import nltk
from nltk.tokenize import word_tokenize
from nltk.stem.porter import PorterStemmer
from nltk.corpus import stopwords
#停用词
stop_words = set(stopwords.words('english'))
#文本
text = "Natural language processing is a subfield of linguistics, computer science, and artificial intelligence."
#对文本进行分词
tokens = word_tokenize(text.lower())
#去掉停用词
tokens = [w for w in tokens if not w in stop_words]
#对词干进行提取
stemmer = PorterStemmer()
stemmed = [stemmer.stem(word) for word in tokens]
#输出处理后的词汇
print(stemmed)
特征提取
文本分类和情感分析需要将文本转换为可操作的数字格式,即特征提取。在Python中,我们可以使用两种类型的特征提取器:CountVectorizer和TfidfVectorizer。CountVectorizer计算每个词语在给定文本中出现的次数,而TfidfVectorizer根据频率-逆文本频率计算每个词语的相对重要性。以下代码展示了如何使用TfidfVectorizer从给定文本文档中提取特征。
#导入nltk库
import nltk
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
#文本
text1 = 'This is the first document.'
text2 = 'This is the second second document.'
text3 = 'And the third one. One and Two'
#将文本转换为数据框
df = pd.DataFrame({'text': [text1, text2, text3]})
#TF-IDF特征提取器
vectorizer = TfidfVectorizer()
#将文本转换为tf-idf特征矩阵
X = vectorizer.fit_transform(df['text'])
#输出特征矩阵
print(X)
情感分析
情感分析是将文本分类为正面、负面或中性情感的过程。在Python中,我们可以使用sklearn库中的多个分类器来训练和测试情感分析模型。以下代码展示了如何使用朴素贝叶斯分类器对电影评论进行情感分析,并输出其精确度和召回率。
#导入nltk库
import nltk
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, recall_score
#定义文本和标签
text = ['The movie was great.', 'I did not like the movie.', 'The acting was superb.', 'The plot was confusing.']
label = [1, 0, 1, 0]
#将文本和标签转换为数据框
df = pd.DataFrame({'text': text, 'label': label})
#TF-IDF特征提取器
vectorizer = TfidfVectorizer()
#将文本转换为tf-idf特征矩阵
X = vectorizer.fit_transform(df['text'])
y = df['label']
#朴素贝叶斯分类器
clf = MultinomialNB().fit(X, y)
#测试集
test_text = ['The movie was terrible.', 'The acting was mediocre.']
test_label = [0, 1]
#将测试文本转换为tf-idf特征矩阵
test_X = vectorizer.transform(test_text)
#预测标签
predicted = clf.predict(test_X)
#输出精确度和召回率
print('Accuracy:', accuracy_score(test_label, predicted))
print('Recall:', recall_score(test_label, predicted, average='weighted'))