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技术站