文本数据抽取与分类:词袋法与TF-IDF算法详解及实战案例
文本数据特征提取是自然语言处理(NLP)中的重要步骤,它决定了后续机器学习模型的表现。本文将介绍两种常用的文本特征提取方法——词袋法(Bag of Words)和TF-IDF(Term Frequency-Inverse Document Frequency),并通过实战案例展示如何应用这些方法进行文本分类。
一、词袋法(Bag of Words)原理及应用
1.1 词袋法原理
词袋法是一种简单有效的文本表示方法,它将文档中的词语看作无序集合。词袋模型会忽略词序和语法结构,关注的是词语的出现频率。其主要步骤如下:
- 1.构建词汇表:从所有文档中提取唯一的词语,形成词汇表。
- 2.生成特征向量:每个文档基于词汇表生成一个特征向量,向量元素表示词语在该文档中的出现次数。
例如,给定以下文本:
corpus = [
‘This is the first document.’,
‘This is the second second document.’,
‘And the third one.’,
‘Is this the first document?’
]
词袋模型首先构建如下词汇表:
[‘and’, ‘document’, ‘first’, ‘is’, ‘one’, ‘second’, ‘the’, ‘third’, ‘this’]
然后,每个文档生成一个词频向量,向量的每个元素对应词汇表中的词语在该文档中的出现次数。
1.2 词袋法的优缺点
优点:
- 实现简单,计算速度快。
- 适用于短文本或词语之间没有复杂语义关系的场景。
缺点:
- 忽略了词序和语法结构,导致语义信息丢失。
- 对于高频但无意义的词(如停用词),它们在模型中占据较大权重。
- 无法捕捉词语之间的上下文信息。
1.3 词袋法应用案例
以下代码展示了如何使用 CountVectorizer 实现词袋法,并生成词频矩阵:
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
# 创建文本数据集
corpus = [
'This is the first document.',
'This is the second second document.',
'And the third one.',
'Is this the first document?'
]
# 初始化 CountVectorizer
vec = CountVectorizer()
X = vec.fit_transform(corpus)
# 获取特征名称(词汇表)
print(vec.get_feature_names_out())
# 输出词频矩阵
print(X.toarray(</