自然语言处理(NLP)与Python实践指南

深入理解自然语言处理的实践应用

新冠病毒(COVID-19)是一种由新型冠状病毒引起的传染病。大多数感染者会出现轻微到中度的呼吸道疾病,部分人无需特殊治疗即可康复。老年人和有基础疾病如心血管疾病、糖尿病、慢性呼吸系统疾病和癌症的患者更可能出现严重病情。

在本文中,将使用一个包含关于新冠病毒的推文数据集进行情感分析。数据集可以从kaggle.com获取,其中包含了用户的地理位置、推文日期、原始推文文本以及情感标签。

首先,需要导入处理模型所需的库,例如pandas用于数据处理,re用于正则表达式,nltk用于自然语言处理,特别是其中的stopwords模块。

import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt import re import nltk nltk.download('stopwords') from nltk.corpus import stopwords

接下来,读取名为“Corona_NLP_train.csv”的文件,并查看数据集的前5条记录。

data = pd.read_csv("Corona_NLP_train.csv",encoding='latin1') df = pd.DataFrame(data) df.head()

然后,使用matplotlib和seaborn库进行数据可视化,以了解数据的分布情况。

plt.figure(figsize=(10,5)) sns.countplot(x='Sentiment', data=df, order=['Extremely Negative', 'Negative', 'Neutral', 'Positive', 'Extremely Positive'], )

此外,还可以通过正则表达式函数来清除推文中的符号和特殊字符,以获得更纯净的数据。

reg = re.compile("(@[A-Za-z0-9]+)|(#[A-Za-z0-9]+)|([^0-9A-Za-z t])|(w+://S+)") tweet = [] for i in df["OriginalTweet"]:   tweet.append(reg.sub(" ", i)) df = pd.concat([df, pd.DataFrame(tweet, columns=["CleanedTweet"])], axis=1, sort=False)

通过上述代码,得到了清洗后的数据。接下来,将文本转换为词项矩阵,并使用TfidfVectorizer进行向量化。

from sklearn.feature_extraction.text import TfidfVectorizer stop_words = set(stopwords.words('english')) vectoriser = TfidfVectorizer(stop_words=None)

使用LabelEncoder将分类值转换为数值。

X_train = vectoriser.fit_transform(df["CleanedTweet"]) from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() y_train = encoder.fit_transform(df['Sentiment'])

然后,使用多项式朴素贝叶斯分类器进行模型训练。

from sklearn.naive_bayes import MultinomialNB classifier = MultinomialNB() classifier.fit(X_train, y_train)

对于测试数据,同样执行上述操作。

test_data = pd.read_csv("Corona_NLP_test.csv",encoding='latin1') test_df = pd.DataFrame(test_data) reg1 = re.compile("(@[A-Za-z0-9]+)|(#[A-Za-z0-9]+)|([^0-9A-Za-z t])|(w+://S+)") tweet = [] for i in test_df["OriginalTweet"]:   tweet.append(reg1.sub(" ", i)) test_df = pd.concat([test_df, pd.DataFrame(tweet, columns=["CleanedTweet"])], axis=1, sort=False) X_test = vectoriser.transform(test_df["CleanedTweet"]) y_test = encoder.transform(test_df["Sentiment"]) y_pred = classifier.predict(X_test) pred_df = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred}) from sklearn import metrics fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred, pos_label=1) plt.plot(fpr, tpr) plt.xlabel('False positive rate') plt.ylabel('True positive rate') plt.title('ROC curve') plt.show() print("AUC of the predictions: {0}".format(metrics.auc(fpr, tpr)))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485