欢迎访问宙启技术站
智能推送

使用sklearn.datasets生成的中文数据集进行文本分类与情感分析

发布时间:2023-12-25 03:55:16

在使用Sklearn中的数据集生成器生成中文数据集之前,我们需要先安装一些必要的库。我们需要安装sklearn用于建模,jieba用于分词,numpy用于数据处理和计算,matplotlib用于结果可视化。您可以使用以下命令安装这些库:

pip install -U scikit-learn jieba numpy matplotlib

接下来,我们可以开始生成中文文本数据集并进行文本分类和情感分析。

首先,我们需要导入所需的库和数据集生成器。Sklearn中的数据集生成器提供了许多用于生成各种类型数据集的函数。在我们的示例中,我们将使用sklearn.datasets.make_classification生成文本分类数据集:

import numpy as np
import jieba
from sklearn.datasets import make_classification
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt

# 设置随机种子
np.random.seed(42)

# 使用make_classification生成文本分类数据集
def generate_text_classification_dataset():
    # 定义文本内容
    texts = ['这是一篇正面文章', '这是一篇正面评论', '这是一篇中性文章', '这是一篇负面评论', '这是一篇负面文章']
    # 定义类别标签
    labels = [1, 1, 0, 0, 2]
    # 将文本内容进行分词
    texts = [' '.join(list(jieba.cut(text))) for text in texts]

    return texts, labels

texts, labels = generate_text_classification_dataset()

在这个例子中,我们定义了一个包含5个中文文本和对应标签的数据集。我们将文本内容用jieba库进行分词,以便进行后续的特征提取和建模。在这个示例中,我们有3个类别标签,分别表示正面、中性和负面。接下来,我们将使用TF-IDF特征提取器将文本转换为数值表示。

# 使用TF-IDF进行特征提取
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(texts)

# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)

现在,我们已经将文本转换为数值特征向量,并将数据集划分为训练集和测试集。接下来,我们将使用支持向量机(SVM)算法进行文本分类训练:

# 使用SVM进行文本分类
svm = SVC()
svm.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = svm.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

# 绘制混淆矩阵
cm = confusion_matrix(y_test, y_pred)
plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('Confusion matrix')
plt.colorbar()
plt.xticks([0, 1, 2], ['Positive', 'Neutral', 'Negative'])
plt.yticks([0, 1, 2], ['Positive', 'Neutral', 'Negative'])
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()

在这个例子中,我们使用支持向量机算法进行文本分类训练,并计算了在测试集上的准确率。接下来,我们使用混淆矩阵可视化分类结果。从混淆矩阵中,我们可以清楚地看到算法在预测正面、中性和负面评论时的表现。

除了文本分类,我们还可以使用类似的方法进行情感分析。情感分析是指根据文本内容分析其表示的情感倾向,例如正面、负面或中性等。下面是一个简单的示例:

# 使用make_classification生成情感分析数据集
def generate_sentiment_analysis_dataset():
    texts = ['这是一个很好的产品', '这个产品一般般', '这个产品很差']
    labels = [1, 0, -1]
    texts = [' '.join(list(jieba.cut(text))) for text in texts]

    return texts, labels

texts, labels = generate_sentiment_analysis_dataset()

# 使用相同的步骤进行特征提取和建模
X = vectorizer.transform(texts)

X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)

# 使用SVM进行情感分析训练
svm = SVC()
svm.fit(X_train, y_train)

y_pred = svm.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

cm = confusion_matrix(y_test, y_pred)
plt.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
plt.title('Confusion matrix')
plt.colorbar()
plt.xticks([0, 1, 2], ['Positive', 'Neutral', 'Negative'])
plt.yticks([0, 1, 2], ['Positive', 'Neutral', 'Negative'])
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()

这个示例中,我们生成了一个包含3个中文文本和对应标签的情感分析数据集。其中,1表示正面情感,0表示中性情感,-1表示负面情感。我们使用相同的步骤进行特征提取和建模,并评估了算法在测试集上的准确率和混淆矩阵。

通过使用Sklearn中的数据集生成器和相应的文本处理方法,我们可以很容易地生成中文数据集,并进行文本分类和情感分析。这些例子向我们展示了如何使用Sklearn进行中文文本建模,并对结果进行分析和可视化。