Python实现文本特征提取的方法详解

Python实现文本特征提取的方法详解

文本特征提取是文本处理中的一个重要步骤,通常是将文本转化为数字向量的过程,以便于机器学习算法的输入。本文将介绍Python中文本特征提取的常用方法。

本文将使用scikit-learn库进行文本特征提取和相关的机器学习模型操作。首先需要在终端输入以下命令安装该库:

pip install -U scikit-learn

1. 文本数据准备

首先需要准备文本数据,这里使用UCI机器学习库中的垃圾邮件数据集作为示例。

import pandas as pd

# 导入数据
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00228/smsspamcollection.zip'
spam = pd.read_csv(url, sep='\t', names=['label', 'message'])

# 查看数据
print(spam.head())

运行以上代码可以看到数据集前五条数据:

  label                                            message
0   ham  Go until jurong point, crazy.. Available only ...
1   ham                      Ok lar... Joking wif u oni...
2  spam  Free entry in 2 a wkly comp to win FA Cup fina...
3   ham  U dun say so early hor... U c already then say...
4   ham  Nah I don't think he goes to usf, he lives aro...

2. 文本特征提取

2.1 计数向量

最常用的文本特征提取方法是计数向量法。计数向量法将文本转化为固定长度的向量,其中每个元素表示一个特定的词在文本中出现的次数。CountVectorizer是用于文本计数的类。

from sklearn.feature_extraction.text import CountVectorizer

# 创建计数向量器
count_vect = CountVectorizer()

# 计算词频矩阵并转化为稀疏矩阵
X_counts = count_vect.fit_transform(spam['message'])

# 查看词频矩阵
print(X_counts)

运行以上代码可以看到输出的词频矩阵:

  (0, 8460) 1
  (0, 1114) 1
  (0, 3070) 1
  (0, 1298) 1
  (0, 4642) 1
  (0, 3613) 1
  (0, 2962) 1
  (0, 6167) 1
  (0, 3510) 1
  (0, 2234) 1
  ...

2.2 TF-IDF向量

TF-IDF向量是一种在文本挖掘中常用的特征表示方法。与计数向量类似,但是在计算每个词的权重时,TF-IDF向量考虑了该词对整个文本集的重要性,因为一些常见的词(如“the”和“a”)在每个文本中都出现,但是它们对文本的实际含义并不重要。

from sklearn.feature_extraction.text import TfidfVectorizer

# 创建TF-IDF向量器
tfidf_vect = TfidfVectorizer()

# 计算词频矩阵并转化为稀疏矩阵
X_tfidf = tfidf_vect.fit_transform(spam['message'])

# 查看词频矩阵
print(X_tfidf)

运行以上代码可以看到输出的TF-IDF向量:

  (0, 2234) 0.18930131541726813
  (0, 3510) 0.3052821039105251
  (0, 6167) 0.3430095133648276
  (0, 2962) 0.2544720553350732
  (0, 3613) 0.2274403788624066
  (0, 4642) 0.28226345093410824
  (0, 1298) 0.3052821039105251
  (0, 3070) 0.3052821039105251
  (0, 1114) 0.3430095133648276
  (0, 8460) 0.3107150520693983
  ...

3. 机器学习模型训练

使用scikit-learn库也可以方便地完成文本分类等机器学习任务。这里使用朴素贝叶斯分类器作为示例。

from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X_tfidf, spam['label'], test_size=0.3, random_state=42)

# 训练模型
nb = MultinomialNB()
nb.fit(X_train, y_train)

# 预测测试集
y_pred = nb.predict(X_test)

# 查看模型评价指标
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
print('Accuracy:', accuracy_score(y_test, y_pred))
print('Classification report:', classification_report(y_test, y_pred))
print('Confusion matrix:', confusion_matrix(y_test, y_pred))

运行以上代码可以看到输出的模型评价指标:

Accuracy: 0.9645885286783042
Classification report:               precision    recall  f1-score   support

         ham       0.98      0.99      0.99      1448
        spam       0.93      0.87      0.90       224

    accuracy                           0.96      1672
   macro avg       0.96      0.93      0.94      1672
weighted avg       0.96      0.96      0.96      1672

Confusion matrix: [[1434   14]
 [  29  195]]

4. 总结

本文介绍了Python中文本特征提取的常用方法,包括计数向量和TF-IDF向量,并展示了朴素贝叶斯分类器的应用。对于大规模的文本数据集,可以进一步优化计算速度。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现文本特征提取的方法详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Python类的常用高级函数汇总

    具体讲解“Python类的常用高级函数汇总”的完整攻略如下: 概述 Python类是一种面向对象编程的核心概念,类的高级函数是一些能够对类进行操作的函数,包含在Python的类库中。这些函数可以显著提高我们面向对象编程的效率和灵活性,并且还可以帮助我们更好地理解类的内部机制。 本篇攻略将介绍Python类的常用高级函数,包括对象直接访问函数、继承函数、特殊方…

    python 2023年6月5日
    00
  • Python利用pynimate实现制作动态排序图

    Python利用pynimate实现制作动态排序图 什么是pynimate pynimate是一个Python模块,用于可视化数据的动画制作。它基于Matplotlib构建,可以使用Matplotlib已有的绘图工具,创建动态、交互的图表。 pynimate构建于Matplotlib之上,因此,它的使用方法与Matplotlib非常相似,只需要稍作调整就可以…

    python 2023年6月6日
    00
  • Python中的集合介绍

    Python中的集合介绍 在Python中,集合是一种无序的、可变的数据类型,用于存储不重复的元素。集合是一种非常常用的数据类型,可以用于去重、交、并集操作。本文将详细介绍Python中的集合,包括集合的创建、集合的操作、集合的方法等。 集合的创建 要创建一个集合,我们可以使用set()函数或使用花括号{}。例如: # 创建集合 my_set = set([…

    python 2023年5月13日
    00
  • python3实现随机数

    下面我来详细讲解“Python3实现随机数”的完整攻略。 1. random库 Python中内置的random库可以生成伪随机数(Pseudorandom Numbers),它可以用来进行随机数的生成。 1.1 生成随机数(整数) random库中生成随机数的函数有多种,下面介绍其中两个: randint(a, b):生成一个[a, b]之间的整数。例如:…

    python 2023年6月3日
    00
  • 一篇文章彻底弄懂Python字符编码

    一篇文章彻底弄懂Python字符编码 什么是字符编码 字符编码是将字符转换成二进制数的过程。计算机只能理解二进制数,因此需要将字符编码为二进制数才能在计算机中存储和传输。 在Python中,常用的字符编码有ASCII、UTF-8和GBK等。 ASCII码是美国信息交换标准代码,仅包含128个常用字符,包括大小写字母、数字和一些符号。它是最早的字符编码之一,但…

    python 2023年5月31日
    00
  • python中的路径拼接问题

    当我们在Python中处理文件和文件夹时,经常需要拼接路径。Python提供了”os”模块和”pathlib”模块来处理路径相关的问题,其中”pathlib”模块比”os”模块更加直观和易用。 使用os模块拼接路径 在使用”os”模块拼接路径时,我们可以使用”join”函数来完成路径的拼接操作。”join”函数接受多个路径参数,每个参数之间使用系统的路径分隔…

    python 2023年6月2日
    00
  • 打开电脑上的QQ的python代码

    打开电脑上的QQ,是一个比较常见的需求。以下是完整的攻略指南: 前置条件 在进行此操作之前,需要先保证您的电脑上已经安装好了Python和QQ,并且已经熟悉如何使用Python。 代码实现 要打开电脑上的QQ,可以使用Python的os模块中的system函数,调用系统命令打开QQ的可执行文件,具体代码实现如下: import os os.system(&q…

    python 2023年5月30日
    00
  • Python构造自定义方法来美化字典结构输出的示例

    让我们开始讲解“Python构造自定义方法来美化字典结构输出的示例”完整攻略。 1. 什么是美化字典结构输出? 在Python中,字典是一种非常常用的数据类型,常常用于存储大量的键值对数据。然而,Python默认输出字典的方式可能不够清晰明了,而且对于一个包含嵌套字典的复杂结构,Python的默认输出方式会让人无法迅速掌握其结构和关系。因此,我们需要构造自定…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部