首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python从零实现文本特征提取(词袋模型)

Python从零实现文本特征提取(词袋模型)

作者头像
用户2423478
发布2025-10-31 18:48:06
发布2025-10-31 18:48:06
2120
举报
文章被收录于专栏:具身小站具身小站

词袋模型是一种基于单词出现次数的统计模型,将文本表示为一个固定大小的向量,每个维度代表一个词语,该维度的值表表示该词语在文本中出现的次数。

1. 模块概述

sklearn.feature_extraction.text 是 scikit-learn 库中专门用于文本特征提取的核心模块,它提供了一系列工具将原始文本数据转换为机器学习算法可以处理的数值特征向量。这个转换过程通常称为向量化(Vectorization)或特征提取(Feature Extraction)。

核心功能

  • 文本预处理:清理、标准化文本
  • 分词(Tokenization):将文本拆分为词语或n-gram
  • 词汇表构建:创建词项到特征索引的映射
  • 特征权重计算:计算词频(TF)、逆文档频率(IDF)等
  • 向量化:将文本转换为数值特征向量

适用场景

  • 文本分类(如垃圾邮件检测)
  • 情感分析
  • 主题建模
  • 信息检索
  • 文本聚类
  • 推荐系统

2. 词袋模型

CountVectorizer 是文本特征提取的基础工具,它实现了词袋模型(Bag of Words, BoW),将文本转换为词频矩阵。

CountVectorizer 的工作流程:

  1. 预处理:清理文本(如转小写、去除标点)
  2. 分词:将文档拆分为词语(tokens)
  3. 构建词汇表:创建从词语到特征索引的映射
  4. 计数:统计每个文档中每个词的出现频率
  5. 向量化:生成文档-词项矩阵

关键参数

参数

类型

默认值

说明

input

str

‘content’

输入类型(‘filename’, ‘file’, ‘content’)

encoding

str

‘utf-8’

文件编码

decode_error

str

‘strict’

编码错误处理方式

strip_accents

str/None

None

是否去除重音符号(‘ascii’, ‘unicode’)

lowercase

bool

True

是否转换为小写

preprocessor

callable/None

None

预处理器函数

tokenizer

callable/None

None

分词器函数

stop_words

str/list/None

None

停用词列表('english’或自定义列表)

token_pattern

str

r’(?u)\b\w\w+\b’

用于匹配token的正则表达式

ngram_range

tuple (min_n, max_n)

(1, 1)

生成n-gram的范围

analyzer

str/callable

‘word’

分析器类型(‘word’, ‘char’, ‘char_wb’, 或自定义函数)

max_df

float/int

1.0

过滤出现在超过max_df比例文档中的词

min_df

float/int

1

过滤出现在少于min_df比例/数量文档中的词

max_features

int/None

None

限制词汇表大小

vocabulary

mapping/iterable/None

None

自定义词汇表

binary

bool

False

是否使用二进制特征(0/1)而非计数

dtype

type

int64

特征矩阵的数据类型

核心方法

方法

说明

fit(raw_documents)

学习词汇表

transform(raw_documents)

将文档转换为文档-词项矩阵

fit_transform(raw_documents)

学习词汇表并转换文档

get_feature_names_out()

获取词汇表中的特征名称

get_stop_words()

获取停用词列表

3. 程序实现

代码语言:javascript
复制
import jieba
import sklearn
from sklearn.feature_extraction.text import CountVectorizer
text = ["自然语言处理是人工智能处理的一个重要领域。",
        "自然语言处理和深度学习有着密切的关系。",
        "自然语言处理有很多自然语言相关的应用。",
        "深度学习是机器学习的一个分支。",
    ]
words_list = [jieba.lcut(t) for t in text]
words_seg_str = [" ".join(t) for t in words_list]
print("分词后的文本:",words_list_str)
count_vec = CountVectorizer()
words_count = count_vec.fit_transform(words_seg_str)
print("词袋及其模型特征向量:")
print(count_vec.get_feature_names_out())
print(words_count.toarray())
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 具身小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 词袋模型是一种基于单词出现次数的统计模型,将文本表示为一个固定大小的向量,每个维度代表一个词语,该维度的值表表示该词语在文本中出现的次数。
  • 1. 模块概述
  • 2. 词袋模型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档