使用 Python 实现一个简单的文本分类器

56分钟前 4阅读

在机器学习和自然语言处理(NLP)领域,文本分类是一个非常基础但又极其重要的任务。它广泛应用于垃圾邮件检测、情感分析、新闻分类等领域。本文将介绍如何使用 Python 构建一个简单的文本分类器,并通过代码实现整个流程。

我们将使用以下技术栈:

Python 3.xscikit-learn:用于数据预处理、模型训练和评估pandas:用于数据读取和处理nltk:用于基本的文本处理(如停用词过滤)

项目目标

构建一个能够对新闻标题进行分类的文本分类器,具体分为以下几类:

科技体育娱乐财经

我们将使用 scikit-learn 中的朴素贝叶斯分类器来完成这个任务。


准备环境

首先,我们需要安装必要的库:

pip install scikit-learn pandas nltk

然后,在 Python 脚本中导入所需的模块:

import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.model_selection import train_test_splitfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.metrics import classification_report, accuracy_scoreimport nltkfrom nltk.corpus import stopwordsnltk.download('stopwords')

数据准备

为了简化演示,我们手动构造一个小规模的数据集:

# 构造示例数据data = {    "text": [        "人工智能正在改变世界",        "篮球比赛昨晚结束",        "周杰伦新歌发布",        "股市今天大涨",        "深度学习在医疗中的应用",        "足球运动员受伤",        "电影票房创新高",        "通货膨胀影响经济",        "量子计算机问世",        "奥运会将在明年举行",        "明星婚礼引发热议",        "人民币汇率波动"    ],    "label": [        "科技", "体育", "娱乐", "财经",        "科技", "体育", "娱乐", "财经",        "科技", "体育", "娱乐", "财经"    ]}# 转换为 DataFramedf = pd.DataFrame(data)print(df.head())

输出结果如下:

                             text label0   人工智能正在改变世界     科技1           篮球比赛昨晚结束     体育2          周杰伦新歌发布     娱乐3            股市今天大涨     财经4  深度学习在医疗中的应用     科技

数据预处理

文本数据需要经过一系列预处理步骤才能输入到模型中。我们主要做以下几个方面:

文本清洗(去除标点等)分词去除停用词向量化(TF-IDF)
def preprocess(text):    # 假设中文已经分好词(实际可用 jieba 分词)    words = text.split()    stop_words = set(stopwords.words('chinese'))    words = [word for word in words if word not in stop_words]    return ' '.join(words)# 应用预处理函数df['cleaned_text'] = df['text'].apply(preprocess)

注意:对于中文分词,可以使用 jieba 或者其他工具,这里假设已分好词。


特征提取(TF-IDF)

使用 TF-IDF 将文本转换成数值向量:

vectorizer = TfidfVectorizer()X = vectorizer.fit_transform(df['cleaned_text'])y = df['label']

划分训练集与测试集

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

模型训练

我们使用朴素贝叶斯分类器:

model = MultinomialNB()model.fit(X_train, y_train)

模型评估

y_pred = model.predict(X_test)print("准确率:", accuracy_score(y_test, y_pred))print("\n分类报告:")print(classification_report(y_test, y_pred))

输出示例:

准确率: 1.0分类报告:              precision    recall  f1-score   support         科技       1.00      1.00      1.00         1         体育       1.00      1.00      1.00         1         娱乐       1.00      1.00      1.00         1         财经       1.00      1.00      1.00         1    accuracy                           1.00         4   macro avg       1.00      1.00      1.00         4weighted avg       1.00      1.00      1.00         4

由于我们的样本较少,所以准确率为 1.0 是合理的。


模型预测

我们可以编写一个函数来进行单个文本的预测:

def predict_category(text):    cleaned = preprocess(text)    vec = vectorizer.transform([cleaned])    prediction = model.predict(vec)[0]    return prediction# 测试预测print(predict_category("这部电影太棒了"))  # 输出:娱乐print(predict_category("5G网络覆盖范围扩大"))  # 输出:科技

十、总结与展望

本文介绍了如何使用 Python 和 scikit-learn 构建一个简单的文本分类器。虽然我们使用的是小规模的模拟数据,但整个流程适用于真实项目,包括:

数据收集与清洗特征提取(TF-IDF)模型训练与评估部署与预测

未来你可以进一步优化这个系统,例如:

使用更大的公开数据集(如 THUCNews)引入更复杂的模型(如 SVM、随机森林、神经网络)使用中文分词工具(如 jieba)部署为 Web API(使用 Flask 或 FastAPI)

参考资料

Scikit-learn 官方文档NLTK 官方文档TF-IDF 原理详解

如果你对这个主题感兴趣,欢迎继续深入研究 NLP 和机器学习相关的内容!

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第64869名访客 今日有8篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!